2012-11-03 23 views
7
साथ नेस्टेड JSON ऑब्जेक्ट

मेरे JSON फ़ीड इस तरह की वस्तुओं नेस्ट किया है:पार्सिंग JSON.NET

{ 
"id": 1765116, 
"name": "StrozeR", 
"birth": "2009-08-12", 
"avatar": "http:\/\/static.erepublik.com\/uploads\/avatars\/Citizens\/2009\/08\/12\/f19db99e9baddad73981d214a6e576ef_100x100.jpg", 
"online": true, 
"alive": true, 
"ban": null, 
"level": 61, 
"experience": 183920, 
"strength": 25779.42, 
"rank": { 
    "points": 133687587, 
    "level": 63, 
    "image": "http:\/\/www.erepublik.com\/images\/modules\/ranks\/god_of_war_1.png", 
    "name": "God of War*" 
}, 
"elite_citizen": false, 
"national_rank": 6, 
"residence": { 
    "country": { 
     "id": 81, 
     "name": "Republic of China (Taiwan)", 
     "code": "TW" 
    }, 
    "region": { 
     "id": 484, 
     "name": "Hokkaido" 
    } 
} 
} 

और मेरे वस्तु वर्गों इस तरह हैं:

class Citizen 
{ 
    public class Rank 
    { 
     public int points { get; set; } 
     public int level { get; set; } 
     public string image { get; set; } 
     public string name { get; set; } 
    } 
    public class RootObject 
    { 
     public int id { get; set; } 
     public string name { get; set; } 
     public string avatar { get; set; } 
     public bool online { get; set; } 
     public bool alive { get; set; } 
     public string ban { get; set; } 
     public string birth { get; set; } 
     public int level { get; set; } 
     public int experience { get; set; } 
     public double strength { get; set; } 
     public List<Rank> rank { get; set; } 

    } 
} 

मैं के साथ मेरी JSON डेटा पार्स करने के लिए कोशिश कोड

private async void getJSON() 
{ 
    var http = new HttpClient(); 
    http.MaxResponseContentBufferSize = Int32.MaxValue; 
    var response = await http.GetStringAsync(uri); 

    var rootObject = JsonConvert.DeserializeObject<Citizen.RootObject>(response); 
    uriTB.Text = rootObject.name; 
    responseDebug.Text = response; 
} 

निम्नलिखित लेकिन मैं निम्नलिखित त्रुटि मिलती है:

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[Erepublik.Citizen+Rank]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. 

मैं मुख्य वस्तु में मान को भी पार्स नहीं कर सकता। इसे ठीक करने का कोई उपाय? और मैं नेस्टेड ऑब्जेक्ट के अंदर एक मान को कैसे पार्स कर सकता हूं? उदाहरण के लिए: "अंक" "रैंक"

+0

बस सोच रहा है कि आपने सी # कक्षाओं में 'निवास', 'देश', 'क्षेत्र' को कैसे हराया। मुझे एक ही समस्या है। क्या आप कोड पोस्ट कर सकते हैं। – Venky

उत्तर

19

में जैसा त्रुटि संदेश दर्शाता है, .NET वर्ग में अपने rank संपत्ति एक List<Rank> है, लेकिन आपके JSON में यह सिर्फ एक नेस्टेड वस्तु, नहीं एक सरणी है। इसे List<Rank> के बजाय इसे Rank पर बदलें।

JSON (या वास्तव में कोई भी जावास्क्रिप्ट) में Arrays [] में संलग्न हैं। {} वर्ण एक वस्तु निर्दिष्ट करते हैं। सीएलआर प्रकार को deserialize करने के लिए लगभग JSON प्रकार से मेल खाना है। ऑब्जेक्ट करने के लिए ऑब्जेक्ट, सरणी सरणी।

+0

धन्यवाद। वह समाधान – dum

+0

पुराना पोस्ट था, लेकिन आज उसने मुझे बहुत मदद की। समय बचाने –

+0

तो समाधान क्या है? आपको सूची के लिए एक रैपर बनाने की आवश्यकता है? कोई क्लीनर समाधान? – sky91