我有以下JSON字符串:
[
{ "Person" : { "Name" : "John", "Gender" : "male" } },
{ "Person" : { "Name" : "John", "Gender" : "male" } }
]
(正如您可能注意到的那样,我对数组中的每个对象都有一种“根”元素。没有这个“根”元素,任务变得非常简单。)
我必须将其反序列化为Person
类列表:
class Person {
public string Name { get; set; }
public string Gender { get; set; }
}
...
List<Person> ListPersons() {
return JsonConvert.DeserializeObject<List<Person>>(jsonString);
}
是否可以在不创建像PersonResult这样的包装类的情况下使用Json.NET?
class PersonResult {
public Person Person { get; set; }
}
...
List<Person> ListPersons() {
return JsonConvert.DeserializeObject<List<PersonResult>>(jsonString)
.Select(p => p.Person)
.ToList();
}
对我来说,完美的解决方案是能够以某种方式明确指定这个“根”(例如通过属性)并且不创建任何包装器,助手等。
答案 0 :(得分:4)
不幸的是,关于这个问题,你无能为力。这就是JSON格式的样子,并且没有办法解决这个问题。结果,Json.Net“看到”你的字符串或多或少:
具有
Person
属性的对象数组,这是另一个具有Name
和Gender
属性的对象
您可以使用自定义ContractResolvers播放一些来强制序列化程序以不同的方式工作......但这是相当多的工作。像你建议的包装类就是如何处理这些问题,我建议坚持下去。