我正在尝试将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对象填充到类型
我该怎么做?
答案 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);