2017-05-27 2 views
0

Ich habe ein JSON wie das Beispiel unten und ich verwende C# mit json.net. Ich versuche dieses JSON in ein Objekt zu deserialisieren, aber es funktioniert nicht.C#, Deserialize JSON

{ 
    "classes": [{ 
     "id": 1, 
     "mask": 1, 
     "powerType": "rage", 
     "name": "Warrior" 
    }, { 
     "id": 2, 
     "mask": 2, 
     "powerType": "mana", 
     "name": "Paladin" 
    }, { 
     "id": 3, 
     "mask": 4, 
     "powerType": "focus", 
     "name": "Hunter" 
    }, { 
     "id": 4, 
     "mask": 8, 
     "powerType": "energy", 
     "name": "Rogue" 
    }, { 
     "id": 6, 
     "mask": 32, 
     "powerType": "runic-power", 
     "name": "Death Knight" 
    }, { 
     "id": 12, 
     "mask": 2048, 
     "powerType": "fury", 
     "name": "Demon Hunter" 
    }] 
} 

1) ich eine Klasse erstellt:

public class ClassJson 
{ 
    [JsonProperty(PropertyName = "classes")] 
    public Class Class { get; set; } 
} 

2) Die zweite Klasse:

public class Class 
{ 
    [JsonProperty(PropertyName = "id", NullValueHandling = NullValueHandling.Ignore)] 
    public int Id { get; set; } 

    [JsonProperty(PropertyName = "powerType", NullValueHandling = NullValueHandling.Ignore)] 
    public string PowerType { get; set; } 

    [JsonProperty(PropertyName = "name", NullValueHandling = NullValueHandling.Ignore)] 
    public string Name { get; set; } 
} 

ich die Api nennen, die json bekommen, und ich einfach JsonConvert.DeserializeObject<List<ClassJson>>(json) nennen. Nichts passiert, keine Fehler.

Kann mir jemand einen Tipp geben, um die Klassen besser zu strukturieren?

+2

'Klassen' in gegebenem json repräsentiert ein Array. Also müssen Sie die Eigenschaft als 'public Class [] Classes {get; einstellen; } '. Das sollte funktionieren. –

+0

Versuchen Sie JsonConvert.DeserializeObject (Json). Klassen ist eine Sammlungseigenschaft. –

+2

Ich denke, "Klassen" sollte eine "Liste ", oder ein anderer Sammlungstyp sein. Da ist ein Array in JSON. –

Antwort

1

dies stattdessen versuchen, weil classes soll ein Array sein:

public class ClassJson 
{ 
    [JsonProperty(PropertyName = "classes")] 
    public Class[] classes { get; set; } 
} 

Sie brauchen nicht die Klassen zu schreiben JSON manuell zu repräsentieren. In meiner Antwort here erfahren Sie, wie Sie eine Klassendarstellung Ihres JSON erstellen.

+0

Danke für diesen Tipp, ich wusste nicht über diese Verknüpfung zum Erstellen von Klassen mit einem JSON! – Maturano