2016-10-27 4 views
1

Ich benutze Json-Bibliothek von Daniel Crenna erstellt.Foreach Json-Objekt in C#

Ich habe einen String json Dokument:

{ 
    "id": "00132", 
    "items":[ 
     { 
      "name":"papers" 
     }, 
     { 
      "name":"glasses" 
     } 
    ] 
} 

ich deserialisieren es, und wenn ich will "id" zugreifen zu können, kann ich tun:

Console.WriteLine(myjsonvar.id); 

Aber wenn ich versuche, "foreach Artikel "Eigenschaft:

foreach(var item in myjsonvar.items){ 
    Console.WriteLine(item.ToString()); 
} 

Es zeigt: " System.Collections.Generic.Dictionary'2 [System.String, System.Object]“

Wenn ich das andere tun foreach innerhalb dieses:

foreach(var item in myjsonvar.items){ 
     foreach(var properties in item){ 
      Console.WriteLine(properties); 
     } 
    } 

Ich erhalte "[Name, Papiere]"

Wie kann ich Eigenschaften zugreifen, tun zu wie:

foreach(var item in myjsonvar.items){ 
     var itemName = item.name; 
    } 

Vielen Dank für Ihre Antworten.

+0

Ehrlich gesagt, wenn dies von MVC oder WebApi kommt, sollten Sie in der Lage sein, dies automatisch zu lösen, wenn Sie eine Klasse erstellen und das Modellbinder deserialize haben, wahrscheinlich müssen Sie eine shotty Bibliothek nicht verwenden sind in –

Antwort

2

Da items ist ein Array von Wörterbüchern, Ihre item Variable ist ein Wörterbuch und Sie können versuchen, Objekte in ihm den Zugriff auf den Indexer mit []:

var itemName = item["name"]; // returns "papers", "glasses", etc. 

Was Sie Indexer passieren in der Schlüssel (Eigenschaft Name) und was zurückgegeben wird, ist der Wert.

Beachten Sie, dass die Eigenschaft in Ihrem JSON-Objekt eine Zeichenfolge, eine ganze Zahl, ein boolescher Wert, ein anderes Objekt oder ein Array sein kann. Deshalb lautet der Wert des Wörterverzeichnisses System.Object. Es liegt an Ihnen, es auf den zugrunde liegenden Typ zu übertragen. In diesem Fall sollte item["name"].ToString() funktionieren.

Lesen Sie mehr hier: Dictionary Class

+0

gebaut Ich denke 'Items' ist ein Array von Wörterbüchern, kein Wörterbuch selbst. – adv12

+0

@ adv12 Sie sind richtig, Elemente in einem Array, Element ist ein Wörterbuch :) aber die Antwort sollte noch funktionieren. – PoweredByOrange

0

Was Sie versuchen zu tun deserialize Ihre json String. In C#, jedes Objekt hat die ToString() Methode, die im Grunde den Typ des Objekts als Zeichenfolge zurückgibt. Das bedeutet, dass das, was Sie sehen: System.Collections.Generic.Dictionary'2[System.String, System.Object], das Ergebnis eines Objekts vom Typ Dictionary<string, object> bei der Ausführung der Methode ToString() ist.

Der Grund, warum diese Bibliothek diesen Teil der JSON-Zeichenfolge in ein Wörterbuch konvertiert, ist, weil Sie es nicht mit einem Typ bereitstellen, den es konvertieren sollte (oder vielleicht konvertiert es ein Objekt in ein Wörterbuch, ich nicht wissen, welche Bibliothek Sie verwenden).

Wenn Sie den Typ der Bibliothek sollte auf Ihre json konvertieren angeben, können Sie wie eine Klasse erstellen sollten:

public class DeserializedResult { 
    public int Id { get; set; } 
    public List<string> Items { get; set; } 
    //you can also choose to use a dictionary if you want to keep the key "names" 
    //public List<Dictionary<string, string>> Items { get; set; } 
} 

Die Bibliothek wird wahrscheinlich die Eigenschaftsnamen mit den Tasten der JSON-String und deserialize vergleichen die Daten entsprechend.

Wenn Ihr JSON-String eine andere Taste neben dem Namen haben würde, sagen wir, ‚Alter‘, dann sollten Sie vielleicht eine Klasse erstellen, die die Daten innerhalb der Elemente repräsentiert:

public class Person { 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

Dann in Ihrem DeserializedResult, Items wäre:

public List<Person> Items { get; set;}

0

Bitte meine Lösung gelten.

Klasse für Sie erstellen json.

public class JsonCLass 
{ 
    public string id { get; set; } 
    public Item[] items { get; set; } 
} 

public class Item 
{ 
    public string name { get; set; } 
} 

Und dann verwenden Sie folgenden Code für yesortalize JSON Zeichenfolge.

string strXmlData = File.ReadAllText("file.txt");//json string 

      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      JsonCLass Data = serializer.Deserialize<JsonCLass>(strXmlData); 

      string Id = Data.id;//Id field 

      foreach (Item objitem in Data.items) 
      { 
       string ab = objitem.name;//Get all item of jsonID . 
      } 

Danke.