2016-05-26 6 views
3

Ich habe dieses JSON und ich kann nicht herausfinden, wie man es in eine Liste von Objekten in C# konvertiert. HierWie kann ich dieses JSON mit JsonConvert deserialisieren?

ist die JSON:

{ 
    "2": { 
    "sell_average": 239, 
    "buy_average": 238, 
    "overall_average": 240, 
    "id": 2 
    }, 
    "6": { 
    "sell_average": 184434, 
    "buy_average": 182151, 
    "overall_average": 189000, 
    "id": 6 
    }, 
    "8": { 
    "sell_average": 11201, 
    "buy_average": 1723, 
    "overall_average": 180, 
    "id": 8 
    } 
} 

Und der Code, den ich habe versucht, mit:

public class ItemSummaryModel 
{ 
    public string Id { get; set; } 
    public ItemSummary ItemSummary { get; set; } 
} 

public class ItemSummary 
{ 
    public int Sell_Average { get; set; } 
    public int Buy_Average { get; set; } 
    public int Overall_Average { get; set; } 
    public int Id { get; set; } 
} 

List<ItemSummaryModel> models = 
    JsonConvert.DeserializeObject<List<ItemSummaryModel>>(jsonSummary); 

ohne Erfolg. Wie kann ich dieses JSON mit der JSON-Bibliothek von Newtonsoft (Json.Net) in Listen dieser Objekte deserialisieren?

+2

Ein paar Dinge verwenden zu berücksichtigen: Sie zu einer Liste deserialisieren sind versucht, aber Ihre JSON keine Liste vertreten, es ist nur ein komplexes Objekt mit Eigenschaften. Zweitens stimmen die Domänenobjekteigenschaftsnamen nicht mit den JSON-Eigenschaftsnamen überein. Daher muss ein Großteil des C# mit Attributen versehen werden, die den genauen Namen in JSON angeben. Schließlich gibt es nichts, das anzeigt, dass "2", "6" und "8" "Id" s sind, so dass Ihre JSON-Struktur im Moment nicht der C# -Struktur entspricht. –

Antwort

2

können Sie

var dict = JsonConvert.DeserializeObject<Dictionary<int, ItemSummary>>(json); 
var items = dict.Values.ToList(); //if you want a List<ItemSummary>; 
+0

Verwenden von Dictionary , da String-ID zB "2" in JSON String nicht in int umwandeln kann –

+1

@VuDang Vertrauen Sie mir, JSON.NET ist cleverer als erwartet. –

+1

Das ist ... wirklich elegant. Ich mag es sehr. JSON.NET überzeugt immer wieder. –

0
public class ItemSummaryModel 
{ 
    [JsonProperty(PropertyName = "2")] 
    public ItemSummary Two { get; set; } 
    [JsonProperty(PropertyName = "6")] 
    public ItemSummary Six { get; set; } 
    [JsonProperty(PropertyName = "8")] 
    public ItemSummary Eight { get; set; } 
} 

var result = JsonConvert.DeserializeObject<ItemSummaryModel>(json); 

Dies wird technisch arbeiten Sie ein komplexes Objekt zu bekommen, aber ich weiß nicht viel Vergleichbares. Nummern für Eigenschaftsnamen zu haben wird ein Problem sein. Dieses JSON für ein einzelnes komplexes Objekt wird ebenfalls schwierig sein. Wenn es sich stattdessen um eine Liste handeln würde, könnten Sie damit beginnen, Ihren eigenen ContractResolver zu schreiben, um die Zuordnung des Nummerneigenschaftsnamens zu einem ID-Feld und das tatsächliche Objekt zu der von Ihnen gewünschten Eigenschaft zu ermöglichen.

+0

Danke für Ihre Hilfe. Das einzige Problem dabei ist, dass es insgesamt rund 40.000 Objekte gibt. Denkst du, dass es einfacher wäre, den JSON nach Erhalt in eine Liste zu konvertieren? Ich habe keine Kontrolle über die Ausgabe von JSON. – Anthony

Verwandte Themen