Читать книгу Kochen mit Patrick - Patrick A. Lorenz - Страница 6
Meet JSON.NET
ОглавлениеDie Aufgaben von JSON.NET [1] sind einfach umrissen, denn es sind nur zwei an der Zahl:
die Serialisierung von .NET-Daten in JSON-Strukturen und
das Deserialisieren in umgekehrter Richtung.
Diese Möglichkeiten gibt es in der .NET Framework Class Library zwar von Haus aus schon, doch JSON.NET will es schneller, komfortabler, flexibler oder schlicht gesagt besser machen.
JSON.NET kann ab .NET Version 2.0 genutzt werden, steht für Windows Phone und Windows 8 zur Verfügung und lässt sich über Mono auch auf anderen Plattformen einsetzen, etwa auf mobilen iOS- oder Android-Geräten. In Visual Studio führt der schnellste Weg zu JSON.NET über NuGet. Mit der folgenden Zeile in der Package Manager Konsole wird die Bibliothek heruntergeladen und in Ihr Projekt eingebunden:
PM> Install-Package Newtonsoft.Json
Anschließend können Sie einfache .NET-Datenstrukturen mit nur einem Aufruf in JSON umwandeln:
var person = new Person {
ID = 1,
FirstName = "Theodor",
LastName = "Heuss"
};
var json = JsonConvert.SerializeObject(person);
Debug.WriteLine(json);
Das Ergebnis sieht so aus:
>{"ID":1,"FirstName":"Theodor","LastName":"Heuss"}
Für bessere Lesbarkeit unterstützt JSON.NET auch eine formatierte Serialisierung, die die Objekthierarchie mittels Einrückung sichtbar macht:
var json = JsonConvert.SerializeObject( person, Formatting.Indented);
Leserlich formatiert zeigt sich die Datenstruktur dann wie folgt:
{
"ID": 1,
"FirstName": "Theodor",
"LastName": "Heuss"
}
Umgekehrt geht es auch: JSON.NET kann aus einer JSON-Zeichenkette ein .NET-Objekt deserialisieren:
var deserializedPerson = JsonConvert.DeserializeObject<Person>(json);
Steht eine passende Klasse nicht zur Verfügung, kann diese als dynamischer Typ als eine Art Prototyp übergeben werden. Das sieht dann so aus:
var deserializedAnonymousType = JsonConvert.DeserializeAnonymousType( json, new {
FirstName = string.Empty,
LastName = string.Empty
});
Debug.WriteLine( deserializedAnonymousType.LastName);
Offiziell unterstützt JSON.NET darüber hinaus dynamische Objekte. In Verbindung mit dem Schlüsselwort kann ohne explizite Übergabe eines Datentyps typisiert auf Eigenschaften zugegriffen werden:
dynamic deserializedDynamicType = JsonConvert.DeserializeObject<dynamic>(
json);
Debug.WriteLine( deserializedDynamicType.LastName);
Wenngleich formal unterstützt, funktioniert dies leider nicht, sondern wird mit einem Laufzeitfehler quittiert. Zumindest bei mir. Ich habe mich in der Vergangenheit schon einmal mehrere Stunden mit diesem Problem gequält; damals wie heute völlig erfolglos. Vielleicht haben Sie mehr Glück?