2012-01-05 15 views
5

मैं JSON स्ट्रिंग निम्नलिखित है: (।। आप दुर्भाग्य से देख सकते हैं जैसा कि मैंने तत्व "रूट" सरणी में प्रत्येक वस्तु के लिए एक तरह से यह "रूट" तत्व कार्य काफी तुच्छ हो जाता है बिना है)Json.NET का उपयोग करके सरणी में प्रत्येक ऑब्जेक्ट के लिए "रूट" तत्व के साथ JSON सरणी को deserialize कैसे करें?

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

मैं Person वर्ग की एक सूची में deserialize करने के लिए है:

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(); 
} 

मेरे लिए एकदम सही समाधान इस "रूट" (उदाहरण के लिए के माध्यम से विशेषता) निर्दिष्ट करें और किसी भी रैपर नहीं बनाते हैं, सहायकों किसी भी तरह स्पष्ट रूप से सक्षम होने के लिए, आदि

उत्तर

4

Unfortunatelly, वहाँ काफी नहीं है आप कर सकते हैं इस मुद्दे के बारे में करो। इस तरह JSON प्रारूप कैसा दिखता है और उसके आस-पास कोई रास्ता नहीं है। नतीजतन, Json.Net के रूप में अपने स्ट्रिंग "देखता है" और अधिक या कम:

Person संपत्ति, जिसके साथ Name और Gender गुण

आप कर सकते थे किसी अन्य वस्तु है के साथ वस्तुओं की एक सरणी सीरिएलाइज़र को अलग-अलग काम करने के लिए मजबूर करने के लिए संभावित रूप से कस्टम ContractResolvers के साथ कुछ खेलें ... लेकिन यह काफी काम है। आपके जैसे रैपर वर्ग ने सुझाव दिया है कि उन समस्याओं का सामना कैसे किया जाता है, और मैं इसे चिपकाने का सुझाव देता हूं।

+0

हाँ, दुर्भाग्य से मुझे रैपर दृष्टिकोण के साथ समाप्त होना पड़ा। धन्यवाद। –

संबंधित मुद्दे