当附加到模型vs JsonResult时,ASP MVC对Dictionary <string,string>的序列化方式不同

时间:2018-07-19 18:02:33

标签: javascript json asp.net-mvc

我的模型上附加了一个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中有用的内容?

1 个答案:

答案 0 :(得分:0)

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

映射:(来自另一个question

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"
}