it-swarm.com.de

Newtonsoft JSON Deserialize

Mein JSON lautet wie folgt:

{"t":"1339886","a":true,"data":[],"Type":[['Ants','Biz','Tro']]}

Ich fand die Newtonsoft JSON.NET-Deserialisierungsbibliothek für C #. Ich habe versucht, es wie folgt zu verwenden:

object JsonDe = JsonConvert.DeserializeObject(Json); 

Wie kann ich auf das Objekt JsonDe zugreifen, um alle "Typ" -Daten abzurufen? Ich habe es mit einer Schleife versucht, aber es funktioniert nicht, weil das Objekt keinen Enumerator hat.

76
abc cba

Sie können eine Klasse implementieren, die die Felder enthält, die Sie in Ihrem JSON haben

class MyData
{
    public string t;
    public bool a;
    public object[] data;
    public string[][] type;
}

und verwenden Sie dann die generische Version von DeserializeObject:

MyData tmp = JsonConvert.DeserializeObject<MyData>(json);
foreach (string typeStr in tmp.type[0])
{
    // Do something with typeStr
}

Dokumentation: JSON serialisieren und deserialisieren

127
Michael Banzon

Eine viel einfachere Lösung: Verwenden eines dynamischen Typs

Ab Json.NET 4.0 Release 1 gibt es native dynamische Unterstützung. Sie müssen keine Klasse deklarieren, verwenden Sie einfach dynamic:

dynamic jsonDe = JsonConvert.DeserializeObject(json);

Alle Felder werden verfügbar sein:

foreach (string typeStr in jsonDe.Type[0])
{
    // Do something with typeStr
} 

string t = jsonDe.t;
bool a = jsonDe.a;
object[] data = jsonDe.data;
string[][] type = jsonDe.Type;

Mit dynamic müssen Sie keine bestimmte Klasse erstellen, um Ihre Daten zu speichern.

76
Yves M.

Gemäß der Newtonsoft-Dokumentation können Sie die Deserialisierung auch für ein anonymes Objekt wie das folgende durchführen:

var definition = new { Name = "" };

string json1 = @"{'Name':'James'}";
var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);

Console.WriteLine(customer1.Name);
// James
8
SomethingOn