ASP MVC序列化字典<字符串,字符串>在附加到模型与JsonResult时以不同的方式序列化



我的模型附带了一个Dictionary<string,string>。当它到达客户端时,它被正确地反序列化为[{"Text":"bla","Value":"V1"},{"Text":"abc","Value":"V2"}, {"Text":"def","Value":"V3"}]

它是由我的控制器中的语句return View(model);发送的。

但当我通过JsonResult发送相同的数据时,如下所示:

var jsonResult = Json(myDictionary, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;

结果是这样的:

{V1: "{ Value = V1, Text = bla }", V2: "{ Value = V2, Text = abc }", V3: "{ Value = V3, Text = def }"}

有没有办法在.NET中解决这个问题,或者我必须解析它并将其重建为javascript中有用的东西?

您可以将Dictionaty<string, string>映射到一个新的object,然后使用Json:返回它

映射:(来自另一个问题(

var dict = new Dictionary<string, string> { { "Property", "foo" } };
var convertedObject = new ExpandoObject();
var eoColl = (ICollection<KeyValuePair<string, object>>)convertedObject;
foreach (var kvp in dict)
eoColl.Add(kvp);    
dynamic eoDynamic = convertedObject;

然后通过JSON返回(正如您已经在做的那样(:

return Json(convertedObject, JsonRequestBehavior.AllowGet);

并像普通对象一样在JavaScript中接收:

{
V1: "bar",
V2: "foo",
V3: "caa"
} 

最新更新