2016-04-28 9 views
-1
kann nicht erstellt und ausgefüllt werden

Ich versuche, JSON (hier ist der Link zu ihm http://antica.e-sim.org/apiFights.html?battleId=3139&roundId=1) in eine Liste von Objekten zu deserialisieren.Deserialisieren von JSON in eine Liste von Objekten - Listentyp

Das ist meine Klasse:

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

Dies ist, wie ich die json bekommen und versuchen, es deserialisieren:

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

Wenn ich versuche, es gibt mir eine Ausnahme desereliaze:

Eine nicht behandelte Ausnahme des Typs "Newtonsoft.Json.JsonSerializationException" trat inauf Weitere Informationen: Listentyp Project.Battles kann nicht erstellt und aufgefüllt werden. Pfad '', Zeile 3, Position 1.

Was mache ich falsch?

+0

@PaulAbbott - es kann ein Duplikat sein, aber diese Antwort ist veraltet. Ich habe eine Antwort hinzugefügt, die Änderungen in Json.NET widerspiegelt, seit es gefragt wurde. – dbc

Antwort

5

Das Problem ist, dass json.net nicht wissen, wie Sie Daten zu Ihrer Klasse Battles hinzufügen. Es Paar Weg, dies zu beheben ist:

  1. Deserialize Ihre Daten in eine Liste:

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

  2. Statt IEnumerable der Umsetzung implementieren ICollection<RootObject> in Ihrer Battles Klasse, dann JsonConvert wird es richtig füllen mit Daten:

    public class Battles: ICollection<RootObject>

Verwandte Themen