【发布时间】:2015-03-30 14:38:14
【问题描述】:
我目前正在开发与 MVC4 API 通信的移动应用程序。 我刚刚注意到的问题是它似乎由于某种原因无法解析嵌套对象。
例子:
我正在向 url (http://localhost/DoSomething) 发布以下数据:
{
"id":610,
"dynamic":[
{
"fieldId":2756,
"fieldValue":""
},
{
"fieldId":2757,
"fieldValue":""
}
],
"person":{
"name":"test",
"age":"123",
"dateOfBirth":"test",
"groups":[
{
"groupId":1182
},
{
"groupId":1311
},
{
"groupId":673
}
]
}
}
知道 MVC 将尝试针对提供的模型对其进行序列化,因此我为请求创建了以下模型:
public class PersonRequest : RequestBase
{
public class Field
{
public int fieldId { get; set; }
public string fieldValue { get; set; }
}
public class Group
{
public int groupId { get; set; }
}
public class Person
{
public string name { get; set; }
public string age { get; set; }
public string dateOfBirth { get; set; }
public IEnumerable<Group> groups { get; set; }
}
public int id { get; set; }
public IEnumerable<Field> dynamic { get; set; }
public Person person { get; set; }
}
为了处理输入,我创建了以下路线(有效):
routes.MapRoute(
name: "PersonRequest",
url: "DoSomething",
defaults: new { controller = "Person", action = "Generate" }
);
还有我的实际路由方式:
[HttpPost]
public ActionResult Generate(PersonRequest request)
{
return Json(request, JsonRequestBehavior.AllowGet);
}
但是响应是:
{"id":610,"person":null,"dynamic":null}
在寻找可能的解决方案后,人们说您必须在这种情况下使用 IEnumerable 而不是 List。可悲的是,这似乎对我不起作用。
只是一些额外的信息: 我总是可以在数据对象 person 和 dynamic 的客户端上使用 JSON.stringify,并最终在后端自己反序列化它(如本主题所示:parse Json text to C# object in asp mvc 4),但必须有更好的解决方法来解决这个问题。
更改:在生成的 json 中将组更改为动态。
【问题讨论】:
-
如何在生成的 JSON 中包含
groups键?是来自RequestBase班级吗? -
RequestBase 包含一个键“散列”,仅此而已。幸运的是,我已经解决了。
标签: c# asp.net json asp.net-mvc