2016-04-28 17 views
-1

我試圖將json(這裏是指向它的鏈接http://antica.e-sim.org/apiFights.html?battleId=3139&roundId=1)反序列化爲對象列表。將json反序列化爲對象列表 - 無法創建並填充列表類型

這是我的課:

public class RootObject 
    { 
     public int Damage { get; set; } 
     public int Weapon { get; set; } 
     public bool Berserk { get; set; } 
     public bool DefenderSide { get; set; } 
     public double MilitaryUnitBonus { get; set; } 
     public int Citizenship { get; set; } 
     public int CitizenId { get; set; } 
     public bool LocalizationBonus { get; set; } 
     public string Time { get; set; } 
     public int MilitaryUnit { get; set; } 
    } 

    public class Battles: IEnumerable<RootObject> 
    { 
     public IEnumerable<RootObject> battles { get; set; } 
     public IEnumerator<RootObject> GetEnumerator() 
     { 
      return battles.GetEnumerator(); 
     } 

     IEnumerator IEnumerable.GetEnumerator() 
     { 
      return battles.GetEnumerator(); 
     } 
    } 

這是我得到的JSON和嘗試反序列化:

string url = "http://" + serverEsim + ".e-sim.org/apiFights.html?battleId=" + 
            battles.ElementAt(k).Key + "&roundId=" + i; 
         WebRequest req = WebRequest.Create(url); 
         WebResponse resp = req.GetResponse(); 
         StreamReader jsr = new StreamReader(resp.GetResponseStream()); 
         Battles battle = JsonConvert.DeserializeObject<Battles>(jsr.ReadToEnd()); 

當我嘗試desereliaze它給了我一個例外:

類型爲 的未處理異常'Newtonsoft.Json.JsonSerializationException'發生在 Newtonsoft.Json.dll

附加信息:無法創建和填充列表類型 Project.Battles。路徑'',第3行,位置1.

我該怎麼做?

+0

@PaulAbbott - 它可能是重複的,但答案已過時。自從問到問題時,我添加了一個反映Json.NET變化的答案。 – dbc

回答

5

問題是,json.net不知道如何將數據添加到您的戰鬥類。有幾個方法來解決這個問題:

  1. 反序列化的數據列表:

    JsonConvert.DeserializeObject<List<RootObject>>(jsr.ReadToEnd());

  2. 無需實現IEnumerable的,實現你的戰場類ICollection<RootObject>,然後JsonConvert將正確填充它附帶數據:

    public class Battles: ICollection<RootObject>