2011-02-18 139 views
5

我正在構建一個小型應用程序,它從我無法控制的API抽取統計信息。 JSON字符串看起來是這樣的:將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; } 
} 

我沒有反序列化的字符串時,它被設置現在的方式,即任何問題我可以這樣做:

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數據做一個字符串。替換(「[weaponName]」,「武器」),但我無法讓它工作無論是。

我會很感激任何提示。

回答

3

你可以做的是從你的JSON中刪除方括號,從數組中將它轉換成字典。於是,這將直接deserialise到這個類:

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

然後你可以做任何你想做這一點。

+0

謝謝大衛。它像一個魅力! – Fr3gU 2011-02-18 14:21:55

相關問題