【问题标题】:C# Parse JSON object array to List<T>C# 将 JSON 对象数组解析为 List<T>
【发布时间】:2017-01-11 17:42:59
【问题描述】:

我有一个表单,它使用 jquery $.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){...}

我也有以下课程:

public class FormValue {
    public string name {get;set;}
    public string value {get;set;}
}

我希望能够将 JSON 'results' 数组的内容转换为 'FormValue' 类,这样我可以将控制器编写为:

public ActionResult Submit(int id, string label, List<FormValue> results){...}

我错过了什么?

【问题讨论】:

  • 一,应该是results: [ { ... }, { ... } ]
  • 输入错误。它是一个数组
  • 另外我假设这是一个 MVC 或 Web API 控制器。您不能将单个 json 对象绑定到多个参数。您必须有一个代表 json 的对象(因此需要 1 个方法参数)。或者,您可以使用查询字符串参数和结果作为 http 正文中的 json 对象发送其他部分(id、标签)。
  • 对 MVC 是的。我看到要发送的 json 数据使用 JSON.stringify 将其全部作为一个字符串而不是对象传递的示例,因此要发送的 $.post 数据将是: var dataToBeSent = { id: data.id, label : data.label, 结果: $('#form').serializeArray() };
  • @RyanDunphy - 正确,但在接收端您有 1 个 c# 对象。所以你会有类似public class Model{public string Id {get;set;} public string Label {get;set;} public List&lt;FormValues&gt; Results {get;set;}} 的东西。然后,该类型将成为您的操作方法中的单个参数。

标签: c# jquery json asp.net-mvc


【解决方案1】:

在接收端,您有 1 个 c# 对象。所以你会有类似

public class Model { 
  public string Id {get;set;} 
  public string Label {get;set;} 
  public List<FormValues> Results {get;set;}
}

然后该类型将成为您的操作方法中的单个参数。

[HttpPost] // do not forget this
public ActionResult Submit(Model model){/*...*/}

这是因为您在 Http 方法体中发送的 json 对象只能映射到单个对应的 c# 对象(如果您使用的是内置绑定)。

还要注意对 Http 动词的限制。如果操作被认为是幂等的,您也可以使用HttpPut这永远不可能是 HttpGet 方法,因为 Http get 不支持消息体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多