【问题标题】:Iterating over a JSON object on the server-side在服务器端迭代 JSON 对象
【发布时间】:2014-01-24 07:20:45
【问题描述】:

如果我有一个像这样的简单模型:

public class Person
{
    public string ID { get; set; }
    public string Name { get; set; }
    public string Age { get; set; }
}

我有一个像这样的JSON 对象:

var people = {
    items: [
        { id: "1", name: "j", age: "11"}
    ]
};

然后我将它传递给WebMethod,如下所示:

Project.Web.Services.AJAXService.Save(JSON.stringify(people), function (result) {
    //
});

我如何在服务器上反序列化它,以便我可以使用foreach 对其进行迭代?

我试过这个:

[WebMethod(true)]
public void Save(string peopleJson)
{
    List<Person> people = JsonConvert.DeserializeObject<List<Person>>(peopleJson);

    foreach (var person in people)
    {
        string str = person.Name;
    }
}

但它抛出以下Exception

无法反序列化当前 JSON 对象(例如 {"name":"value"}) 输入类型 'System.Collections.Generic.List`1[Project.Data.Models.Person]' 因为该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确

编辑:我刚刚从this question 发现它实际上不是JSON 而是JavaScript 对象文字表示法,但我仍然希望能够解析我所拥有的在这里。

edit2:这是peopleJson的内容:"{\"items\":[{\"id\":\"1\",\"name\":\"j\",\"age\":\"11\"}]}"

【问题讨论】:

  • a) 你两次声明people。 b) string people 的内容是什么?
  • 谢谢,我编辑修复了这个问题。我将再次编辑以显示字符串内容
  • 你在使用 wcf 吗?如果是这样,签名 public void Save(List people) 应该可以工作。
  • 不只是 ASMX。这就是我所需要的,纯粹是为了 AJAX
  • @user982119 peopleJson 的内容是什么?

标签: c# javascript json serialization json.net


【解决方案1】:

使用这个类来反序列化

JsonConvert.DeserializeObject<Root>(peopleJson);

public class Root
{
    public List<Person> items { get; set; }
}

【讨论】:

    【解决方案2】:

    问题出在items 包装器中。应该是

    JsonConvert.DeserializeObject&lt;ListOfPersons&gt;(peopleJson)

    在哪里

    public class ListOfPersons
    {
      public Person[] Items {get; set;}
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-07
      • 2013-08-08
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 2013-11-16
      • 1970-01-01
      • 2017-07-26
      相关资源
      最近更新 更多