2011-02-18 24 views
5

के साथ ऑब्जेक्ट में जेएसओएन स्ट्रिंग को Deserializing मैं एक छोटा सा एप्लीकेशन बना रहा हूं जो एक एपीआई से आंकड़े खींचता है जिसका मेरा कोई नियंत्रण नहीं है। JSON स्ट्रिंग इस तरह दिखता है:json.net

{ 
    "weapons": 
     [ 
      { 
       "aek": 
        { 
         "name":"AEK-971 Vintovka", 
         "kills":47, 
         "shots_fired":5406, 
         "shots_hit":858 
        }, 
       "xm8": 
        { 
         "name":"XM8 Prototype", 
         "kills":133, 
         "shots_fired":10170, 
         "shots_hit":1790 
        }, 
      } 
     ] 
} 

और मेरी वस्तुओं स्थापित कर रहे हैं इस प्रकार है:

class WeapsCollection 
{ 
    public WeaponList[] Weapons { get; set; } 
} 

class WeaponList 
{ 
    public WeaponDetails AEK { get; set; } 
    public WeaponDetails XM8 { get; set; } 
} 

class WeaponDetails 
{ 
    public string Name { get; set; } 
    public int Kills { get; set; } 
    public int Shots_Fired { get; set; } 
    public int Shots_Hit { get; set; } 
} 

मैं स्ट्रिंग deserializing जिस तरह से यह अब की स्थापना की है, यानी किसी भी समस्या नहीं है मैं कर सकते हैं:

WeapsCollection weps = JsonConvert.DeserializeObject<WeapsCollection>(json); 
Console.WriteLine(weps.Weapons.First().AEK.Name.ToString()); 
Console.ReadLine(); 

यह आउटपुट AEK-971 Vintovka

ठीक है ... लेकिन मैं अलग-अलग हथियारों को अलग-अलग गुणों के रूप में नहीं चाहता हूं। मैं की गणना करने में सक्षम होना चाहते हैं और प्रत्येक हथियार या कुछ इस तरह पर एक foreach कार्य करें:

Console.WriteLine(weapons.Where(w => w.Kills > 30).Name.ToString()); 

किसी भी सुझाव दिए गए हैं कि यह कैसे प्राप्त करने के लिए?

वास्तविक हथियारों की सूची 60+ है लेकिन मैं स्ट्रिंग करने के बारे में सोच रहा हूं। JSON डेटा पर इसे स्थानांतरित करने से पहले ("[हथियारनाम]", "हथियार") बदलें, लेकिन मैं इसे काम नहीं कर सकता या तो।

मैं किसी भी सुझाव की सराहना करता हूं।

उत्तर

3

आप जो कर सकते हैं वह आपके JSON से स्क्वायर ब्रैकेट को हटा देता है, जो इसे सरणी से एक शब्दकोश में बदल देता है। इसके बाद यह सीधे इस वर्ग में deserialise होगा:

class WeaponList 
{ 
    public Dictionary<string, WeaponDetails> Weapons { get; set; } 
} 

आप जो कुछ भी चाहते हैं उसके बाद आप कर सकते हैं।

+0

धन्यवाद डेविड। यह एक सम्मोहन की तरह काम करता है! – Fr3gU