2014-02-25 7 views
5

Ich habe einen JSON-String:Deserialize Json, wenn die Anzahl von Objekten ist unbekannt

{ 
    "B" : 
    { 
     "JackID" : "1", 
     "Faction" : "B", 
     "Regard" : "24", 
     "Currency" : "1340", 
     "factionName" : "Buccaneer", 
     "factionKing" : "22", 
     "Tcurrency" : "0", 
     "currencyname" : "Pieces of Eight", 
     "textcolor" : "#FFFFFF", 
     "bgcolor" : "#000000" 
    }, 
    "P" : 
    { 
     "JackID" : "1", 
     "Faction" : "P", 
     "Regard" : "20", 
     "Currency" : "250", 
     "factionName" : "Privateer", 
     "factionKing" : "4", 
     "Tcurrency" : "0", 
     "currencyname" : "Privateer Notes", 
     "textcolor" : "#000000", 
     "bgcolor" : "#FFFF00" 
    }, 
    "N" : 
    { 
     "JackID" : "1", 
     "Faction" : "N", 
     "Regard" : "12", 
     "Currency" : "0", 
     "factionName" : "Navy", 
     "factionKing" : "7", 
     "Tcurrency" : "0", 
     "currencyname" : "Navy Chits", 
     "textcolor" : "#FFFFFF", 
     "bgcolor" : "#77AADD" 
    }, 
    "H" : 
    { 
     "JackID" : "1", 
     "Faction" : "H", 
     "Regard" : "-20", 
     "Currency" : "0", 
     "factionName" : "Hiver", 
     "factionKing" : "99", 
     "Tcurrency" : "0", 
     "currencyname" : "", 
     "textcolor" : "#000000", 
     "bgcolor" : "#CC9900" 
    } 
} 

Ich bin James Newton-King Json.NET Parser und ruft:

JackFactionList jackFactionList = JsonConvert.DeserializeObject<JackFactionList>(sJson); 

Wo meine Klassen sind wie folgt definiert:

namespace Controller 
{ 
    public class JackFactionList 
    { 
     public JackFaction B; 
     public JackFaction P; 
     public JackFaction N; 
     public JackFaction H; 
    } 

    public class JackFaction 
    { 
     public int JackId { get; set; } 
     public string Faction { get; set; } 
     public int Regard {get; set;} 
     public int Currency {get; set;} 
     // Faction details 
     public string factionName {get; set;} 
     public string factionKing {get; set;} 
     public int Tcurrency {get; set;} 
     public string currencyname {get; set;} 
     public string textcolor {get; set;} 
     public string bgcolor {get; set;} 
    } 
} 

das alles funktioniert, aber die ursprüngliche Liste könnte anders JackFactions statt B, P, N und H. Ide haben ally was ich möchte ist bekommen:

public class JackFactionList 
{ 
    public List<JackFaction> factionList; 
} 

Ohne den JSON-String zu ändern, wie kann ich die JackFactions als eine Liste bekommen, anstatt einzelne Objekte?

Antwort

8

Sie können es als ein Wörterbuch serialisiert:

var jackFactionList = JsonConvert.DeserializeObject<Dictionary<string,JackFaction>>(sJson); 

Dann Sie die Werte erhalten können:

List<JackFaction> result = jackFactionList.Values.ToList(); 
+0

Ich wusste, dass jemand die Antwort wissen würde. Das funktioniert perfekt. Vielen Dank! – Dave