2012-01-05 27 views
5

我有以下JSON字符串:(正如你可能会注意到不幸的是我有一种“根”元素的数组中的每个对象的没有这个“根”元素的任务就变得非常简单)如何使用Json.NET为数组中的每个对象反序列化带有“root”元素的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); 
} 

是否有可能做Json.NET不会产生像PersonResult包装类?

class PersonResult { 
    public Person Person { get; set; } 
} 
... 
List<Person> ListPersons() { 
    return JsonConvert.DeserializeObject<List<PersonResult>>(jsonString) 
         .Select(p => p.Person) 
         .ToList(); 
} 

对我来说,完美的解决方案是能够以某种方式明确指定这个“根”(例如,通过属性),并且不产生任何包装,助手等

回答

4

可惜的是,有没有什么可以做这个问题。这就是JSON格式的外观,没有办法。其结果是,Json.Net“看到”你的字符串或多或少:

对象的数组与Person财产,这与NameGender性能

您能再对象可能玩一些自定义ContractResolvers强制串行器工作不同......但这是相当多的工作。你所建议的封装类是如何处理这些问题的,我建议坚持下去。

+0

是的,不幸的是我不得不以包装方式结束。谢谢。 – 2012-01-07 19:14:41

相关问题