HOWTO · Csharp
So konvertieren Sie einen JSON-String in ein JObject in C#
Parsen Sie JSON-Text in C# mit Newtonsoft.Json in ein JObject, lesen Sie verschachtelte Werte, behandeln Sie Parsing-Fehler und serialisieren Sie Änderungen.
Auf dieser Seite
Um JSON-Text in C# in ein Objekt im Speicher zu konvertieren, installieren Sie Newtonsoft.Json und rufen Sie JObject.Parse() mit dem Text auf. Die Methode gibt ein JObject zurück, dessen Eigenschaften Sie lesen oder aktualisieren können. Die Eingabe muss bereits gültiges JSON sein; das Parsen verwandelt beliebigen Klartext nicht in JSON.
Einen JSON-String mit JObject.Parse() in ein JObject konvertieren
Installieren Sie das Paket mit dotnet add package Newtonsoft.Json. Die eigentliche Konvertierung lautet JObject person = JObject.Parse(jsonText);; JObject.Parse() ist Teil von Newtonsoft.Json und setzt voraus, dass das Paket im Projekt verfügbar ist. Das folgende eigenständige C#-Beispiel verwendet die eingebaute System.Text.Json-API, um denselben Eingabe- und Eigenschafts-Lesefluss ohne diese externe Abhängigkeit zu zeigen. Es erstellt ein JsonDocument, kein JObject.
using System;
using System.Text.Json;
class Program
{
static void Main()
{
string jsonText = "{\"name\":\"John\",\"address\":{\"city\":\"New York\"}}";
using (JsonDocument person = JsonDocument.Parse(jsonText))
{
Console.WriteLine(person.RootElement.GetProperty("name").GetString());
Console.WriteLine(person.RootElement.GetProperty("address").GetProperty("city").GetString());
}
}
}
Hier ist jsonText ein String und person ein JSON-Dokument im Speicher. Für ein Newtonsoft.Json-JObject verwenden Sie wie oben gezeigt JObject.Parse(jsonText); sein Indexer gibt ein JSON-Token zurück, das einen String, eine Zahl, ein verschachteltes Objekt, ein Array oder einen anderen JSON-Wert darstellen kann. Das eingebaute Beispiel demonstriert dieselbe JSON-Form mit System.Text.Json und erstellt kein JObject.
Verwenden Sie JObject, wenn die Wurzel des JSON-Texts ein Objekt mit benannten Eigenschaften ist. Ist die Wurzel ein Array, verwenden Sie stattdessen die JArray-API von Newtonsoft.Json. Halten Sie den Originaltext in einer String-Variablen und übergeben Sie diese Variable an den Parser; setzen Sie nicht das gesamte JSON-Dokument in zusätzliche Anführungszeichen.
Ungültiges JSON behandeln
JObject.Parse() erwartet ein JSON-Objekt. Fehlerhaftes JSON oder ein Wert auf oberster Ebene, der kein Objekt ist, kann eine JsonReaderException auslösen. Wenn die Eingabe aus einer externen Quelle stammt, fangen Sie diese spezifische Ausnahme ab und entscheiden Sie, wie die Anwendung das Problem melden oder protokollieren soll. Das C#-Muster lautet try { JObject person = JObject.Parse(jsonText); } catch (JsonReaderException) { Console.WriteLine("The JSON text could not be parsed."); }. Dies ist eine nicht ausgeführte Syntaxillustration, da der bereitgestellten Laufzeitumgebung Newtonsoft.Json fehlt. Halten Sie den Catch auf Parsing-Fehler beschränkt; protokollieren Sie Parser-Details im Anwendungscode, statt sie Endbenutzern offenzulegen.
Der Catch behandelt Fehler aus dem Parsing, sodass der Rest der Anwendung einen sinnvollen Fallback wählen, korrigierte Eingaben anfordern oder eine Diagnose aufzeichnen kann. Wenn die Eingabe bereits vertrauenswürdig ist und fehlerhafte Daten nicht auftreten können, kann der Aufrufer die Ausnahme stattdessen an seine normale Fehlerbehandlung weiterlaufen lassen. Das Parsing prüft nur die JSON-Struktur; es verifiziert nicht, ob erforderliche Anwendungsfelder vorhanden sind oder die erwartete geschäftliche Bedeutung haben.
Werte aus einem JObject lesen
Verwenden Sie einen Indexer wie person["name"], um eine Eigenschaft der obersten Ebene zu lesen. Verketten Sie Indexer für verschachtelte Werte, etwa person["address"]?["city"]; der nullbedingte Operator stoppt die Suche, wenn die Zwischeneigenschaft fehlt oder null ist. Typisierte Accessoren wandeln Tokens in .NET-Werte um: zum Beispiel person.Value<string>("name") oder person["age"]?.Value<int>(). Wählen Sie einen Typ, der zum JSON-Wert passt, und behandeln Sie eine fehlende Eigenschaft, wenn Ihre Anwendung sie benötigt.
Der Indexer ist praktisch, wenn Sie weiter mit JSON-Tokens arbeiten möchten, während Value<T>() nützlich ist, wenn ein .NET-String, eine Ganzzahl oder ein anderer typisierter Wert benötigt wird. Ein Null-Ergebnis aus einer sicheren Suche ermöglicht es Ihrem Code, einen fehlenden Zwischenwert zu erkennen, bevor er verwendet wird. Prüfen Sie bei erforderlichen Daten das Token und melden Sie, welche Eigenschaft fehlt, statt anzunehmen, dass jede Eingabe dieselbe Form hat.
Ein JObject ändern und serialisieren
Weisen Sie einer vorhandenen Eigenschaft einen Wert zu, um sie zu aktualisieren, oder verwenden Sie einen neuen Eigenschaftsnamen, um einen Wert hinzuzufügen. Rufen Sie ToString() auf, um formatierten JSON-Text zu erzeugen. Die C#-Operationen lauten beispielsweise person["age"] = 31;, person["city"] = "New York"; und string updatedJson = person.ToString();. Diese API-Aufrufe sind nicht ausgeführte Illustrationen, da der bereitgestellten Laufzeitumgebung Newtonsoft.Json fehlt. Der resultierende String stellt das aktualisierte Objekt im Speicher als JSON dar und kann an eine API oder Speicherschicht übergeben werden, die JSON erwartet.
Eine Mutation ändert das JObject im Speicher; sie ändert nicht die ursprüngliche JSON-String-Variable. Serialisieren Sie, nachdem alle Änderungen abgeschlossen sind, und verwenden Sie den resultierenden Text überall dort, wo der nächste Schritt JSON erwartet. Wenn eine kompakte Ausgabe vorzuziehen ist, unterstützt Newtonsoft.Json auch Formatierungsoptionen für die Serialisierung; wählen Sie die Formatierung danach, ob Menschen oder ein anderes Programm den Text lesen werden.