2012-01-05 10 views
5

: (.. Eğer ben görev oldukça önemsiz hale gelir bu "kök" unsuru olmadan dizideki her nesne için "kök" öğesinin bir tür var maalesef fark edebilirsiniz gibi)JSON dizisini Json.NET kullanarak dizideki her nesne için "root" öğesiyle nasıl deserialize edebilirsiniz? Ben JSON dize şu var

[ 
    { "Person" : { "Name" : "John", "Gender" : "male" } }, 
    { "Person" : { "Name" : "John", "Gender" : "male" } } 
] 

Ben Person sınıfının bir liste halinde bu serisini zorunda:

class Person { 
    public string Name { get; set; } 
    public string Gender { get; set; } 
} 
... 
List<Person> ListPersons() { 
    return JsonConvert.DeserializeObject<List<Person>>(jsonString); 
} 

o PersonResult gibi sarıcı sınıf yaratmadan Json.NET ile yapmak mümkün mü?

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

benim için mükemmel bir çözüm vb

cevap

4

Maalesef, pek bir şey yapabilirsiniz değil, yardımcıları, bu "kök" (örneğin aracılığıyla nitelik) belirtmek ve herhangi mahfazalar oluşturmak yok nasılsa açıkça muktedir olduğunu Bu konu hakkında JSON formatı böyle görünüyor ve bunun etrafında bir yolu yok. Sonuç olarak, Json.Net olarak dize "görür" az ya da çok:

Name ve Gender özelliklerinin

Yapabilirsin başka nesnedir Person özelliği ile nesneler dizisi muhtemelen seri hale getirici farklı çalışmak için zorlamak için özel ContractResolvers ile biraz oynamak ... ama bu biraz iş. Wrapper sınıfı size önerdiğin gibi, bu sorunların nasıl ele alındığı ve buna bağlı kalmanızı öneriyorum.

+0

Evet, maalesef sarıcı yaklaşımla sonuçlanmak zorunda kaldım. Teşekkürler. –