将JSON列表填充到C#对象

时间:2015-08-19 12:50:58

标签: c# json xml json.net converter

我正在尝试将JSON / XML字符串填充到C#对象中。 我将我的XML转换为JSON,然后使用JSON.NET。例如:

JSON字符串

{  
"persons":[  
  {  
     "age":30,
     "name":"david",
     "hobbies":[  
        {  
           "name":"tennis",
           "hours":5
        },
        {  
           "name":"football",
           "hours":10
        }
     ]
  },
  {  
     "name":"adam",
     "age":23,
     "hobbies":[]
  }
]
}

C#Classes

public class Hobbies
{
    public string name;
    public int hours;
}

class Person
{
    public string name;
    public int age;
    public List<Hobbies> hoobies = new List<Hobbies>();
}

我正在尝试将数据填充到人员列表中:

List<Person> persons = new List<Person>();
JsonConvert.PopulateObject(myJsonText, persons);

我得到了这个例外:

  

无法将JSON对象填充到类型

我该怎么做?

2 个答案:

答案 0 :(得分:2)

以下是对象的JSON表示:

{
  "key":"value"
}

,这是对象

的集合/数组/列表的表示
[
    {
      "key":"value"
    },
    {
      "key2":"value2"
    }
]

因此,您的JSON字符串不代表Person类的数组或集合。它使用Persons属性表示对象,该属性是Person对象的集合。

要将其解析为List<Person>,请删除最外面的{ },然后尝试。

您的JSON应该如下所示

[
    {
        "age": 30,
        "name": "david",
        "hobbies": [
            {
                "name": "tennis",
                "hours": 5
            },
            {
                "name": "football",
                "hours": 10
            }
        ]
    },
    {
        "name": "adam",
        "age": 23,
        "hobbies": []
    }
]

然后像这样反序列化

var result = JsonConvert.DeserializeObject<List<Person>>(json);

答案 1 :(得分:2)

您需要一个根对象

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

现在你可以反序列化

var yourObj = JsonConvert.DeserializeObject<Root>(json);