C#解析JSON对象数组以列出<;T>;
我有一个表单,它使用jqueryC#解析JSON对象数组以列出<;T>;,c#,jquery,json,asp.net-mvc,C#,Jquery,Json,Asp.net Mvc,我有一个表单,它使用jquery$.post将以下JSON发送到服务器: { id: 1, label: "myLabel", results: [ { name: "myName1", value: "myValue1" }, { name: "myName2", value: "myValue2" } ] } JSON被发布到一个类似以下内容的控制器: public ActionResult Submit(int id, st
$.post
将以下JSON发送到服务器:
{
id: 1,
label: "myLabel",
results: [
{ name: "myName1", value: "myValue1" },
{ name: "myName2", value: "myValue2" }
]
}
JSON被发布到一个类似以下内容的控制器:
public ActionResult Submit(int id, string label, List<object> results){...}
我希望能够将JSON“results”数组的内容强制转换为“FormValue”类,以便将控制器编写为:
public ActionResult Submit(int id, string label, List<FormValue> results){...}
public ActionResult提交(int-id、字符串标签、列表结果){…}
我遗漏了什么?在接收端有一个c对象。所以你会有类似的
public class Model {
public string Id {get;set;}
public string Label {get;set;}
public List<FormValues> Results {get;set;}
}
这是因为您在Http方法体中发送的json对象只能映射到单个对应的c#对象(如果您使用的是内置绑定)
还要注意对Http谓词的限制。如果动作被认为是幂等的,还可以使用
HttpPut
。这永远不能是HttpGet
方法,因为HttpGet不支持消息体。在接收端有一个c#object。所以你会有类似的
public class Model {
public string Id {get;set;}
public string Label {get;set;}
public List<FormValues> Results {get;set;}
}
这是因为您在Http方法体中发送的json对象只能映射到单个对应的c#对象(如果您使用的是内置绑定)
还要注意对Http谓词的限制。如果动作被认为是幂等的,还可以使用
HttpPut
。这永远不能是一个HttpGet
方法,因为HttpGet不支持消息体。首先,它应该是results:[{…},{…}]
键入的错误。它是一个数组,所以我假设这是一个MVC或Web API控制器。不能将一个json对象绑定到多个参数。您必须有一个表示json的对象(以及1个方法参数)。或者,您可以使用查询字符串参数发送其他部分(id、标签),并将结果作为http正文中的json对象发送。向MVC发送Yes。我看到一些示例,其中要发送的json数据使用json.stringify将其作为一个字符串而不是对象传递,因此$.post要发送的数据是:var dataToBeSent={id:data.id,label:data.label,results:$('#form').serializeArray()@Ryanduphy-正确,但在接收端有1个c#object。因此,您将有类似于公共类模型{public string Id{get;set;}公共字符串标签{get;set;}公共列表结果{get;set;}}
。然后,该类型将成为操作方法中的单个参数。首先,它应该是results:[{…},{…}]
输入错误的类型。它是一个数组,所以我假设这是一个MVC或Web API控制器。不能将一个json对象绑定到多个参数。您必须有一个表示json的对象(以及1个方法参数)。或者,您可以使用查询字符串参数发送其他部分(id、标签),并将结果作为http正文中的json对象发送。向MVC发送Yes。我看到一些示例,其中要发送的json数据使用json.stringify将其作为一个字符串而不是对象传递,因此$.post要发送的数据是:var dataToBeSent={id:data.id,label:data.label,results:$('#form').serializeArray()@Ryanduphy-正确,但在接收端有1个c#object。因此,您将有类似于公共类模型{public string Id{get;set;}公共字符串标签{get;set;}公共列表结果{get;set;}}
。然后,该类型将成为动作方法中的单个参数。
[HttpPost] // do not forget this
public ActionResult Submit(Model model){/*...*/}