迭代服务器端的JSON对象

时间:2014-01-06 19:20:46

标签: c# javascript json serialization json.net

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

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\"}]}"

2 个答案:

答案 0 :(得分:1)

使用此类反序列化

JsonConvert.DeserializeObject<Root>(peopleJson);

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

答案 1 :(得分:1)

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

JsonConvert.DeserializeObject<ListOfPersons>(peopleJson)

,其中

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