用于序列化为Dictionary的JSON结构

时间:2015-06-30 06:01:46

标签: json asp.net-mvc-4 serialization controller

在MVC控制器中,我有一段代码

 [HttpPost]
 public ActionResult One(Dictionary<Guid, int[]> groups)
 {
   return Json(groups);
 }

我需要提供什么样的json结构才能将它正确地序列化到Dictionary中? 试过以下:

{
  "Key": "4e89af43-59c8-492b-b646-1185e3f8776c",
  "Value": [1, 2, 3, 4, 5]
}

{
    "groups": {
        "Key": "4e89af43-59c8-492b-b646-1185e3f8776c",
        "Value": [1, 2, 3, 4, 5]
    }
}

2 个答案:

答案 0 :(得分:0)

如果要将其序列化为“Dictionary”,则需要以下结构:

{
    "Key": "Value",
    "Key": "Value",
    "Key": "Value"
}

在您的情况下,它将是以下对象:

{
    "4e89af43-59c8-492b-b646-1185e3f8776c": [1, 2, 3, 4, 5],
    "4e89af43-1234-492b-b646-1185e3f8776c": [0, -1, -2],
    "4e89af43-59c8-5678-b646-1185e3f8776c": [7]
}

就ASP.NET中的JSON请求而言,您可能需要将其包装在与变量名对应的对象中:

{
    groups: {
        "4e89af43-59c8-492b-b646-1185e3f8776c": [1, 2, 3, 4, 5],
        "4e89af43-1234-492b-b646-1185e3f8776c": [0, -1, -2],
        "4e89af43-59c8-5678-b646-1185e3f8776c": [7]
    }
}

至少,Dictionary<string, int[]>确实应该如此 您有Guid作为密钥,我希望ASP.NET能够将Guid正确序列化为字符串。

答案 1 :(得分:0)

似乎GUID并不意味着在字典中进行序列化。这是我收到的错误

enter image description here

所以我不得不将我的词典更改为下面的参数以及要发送的参数,如下一段代码

[HttpPost]
public ActionResult One(Dictionary<string, int[]> groups)
 {
   return Json(groups);
 }

JSON输入

{"groups":[
    {
        "Key": "4e89af43-59c8-492b-b646-1185e3f8776c",
        "Value": [1, 2, 3, 4, 5]
    }
]}

感谢所有帮助过的人和