2016-04-13 8 views
0

Kann jemand beraten, wie ich die folgenden JSON-Daten lese?JSON-Daten lesen, ohne einen übergeordneten Stammnamen?

[ 
    { 
    "ref": 1, 
    "name": "name1", 
    "year": 2016 
    }, 
    { 
    "ref": 2, 
    "name": "name2", 
    "year": 2016 
    } 
] 

Ich habe versucht, mit JObject.parse zu lesen, aber scheint zu scheitern, weil es an den Eltern kein Name?

Ich habe keine Kontrolle über das Format der gelesenen Daten, da es von einer Drittanbieter-Quelle stammt.

+1

, dass ein 'JArray' ist. – SLaks

+2

Sie können dies einfach als Liste deserialisieren. – chris579

Antwort

1
class Entity 
{ 
    [JsonProperty("ref")] 
    public int @ref { get; set; } 
    public string name { get; set; } 
    public int year { get; set; } 
} 

var result = JsonConvert.DeserializeObject<List<Entity>>(jsonString); 

ref ist ein reserviertes Schlüsselwort in C#, so dass Sie JsonProperty Attribut verwenden, müssen mit einem anderen Namen auf eine Eigenschaft zu binden.

0

Sie können die DeserializeObject() Methode zur Verfügung, in JSON.NET eine Sammlung von dynamic Objekten zurückzukehren:

var json = @"[{""ref"": 1, ""name"": ""name1"",""year"": 2016},{""ref"": 2,""name"": ""name"",""year"": 2016}]"; 

// Build a list to store your objects 
var references = JsonConvert.DeserializeObject<dynamic[]>(json); 

foreach(dynamic reference in references) 
{ 
    // Each dynamic object in here can be referenced as expected 
    // (e.g. reference.name, reference.year and reference["ref"] 
    Console.WriteLine("ref: {0}, name: {1}, year: {2}",reference["ref"], reference.name, reference.year); 
} 

Eine example of this can be seen here und Beispiel für eine Ausgabe zu sehen ist;

ref: 1, name: name1, year: 2016 
ref: 2, name: name, year: 2016 

Wenn Sie bereits eine Klasse hatte den zugehörigen Typ darstellen, dann könnte man direkt an ihn binden, wenn Sie über serialisiert:

JsonConvert.DeserializeObject<YourClassName[]>(json); 
Verwandte Themen