JSON-Serialisierung und Deserialisierung in .NET – Übersicht
Der System.Text.Json-Namespace bietet Funktionen zum Serialisieren und Deserialisieren (bzw. Marshalling und Unmarshalling) von JavaScript Object Notation (JSON). Serialisierung ist der Prozess der Konvertierung des Zustands eines Objekts, d. h. der Werte seiner Eigenschaften, in eine Form, die gespeichert oder übertragen werden kann. Die serialisierte Form enthält keinerlei Informationen zu den zugeordneten Methoden eines Objekts. Deserialisierung rekonstruiert ein Objekt aus der serialisierten Form.
Beim Entwerfen der System.Text.Json
-Bibliothek wurde mehr Wert auf eine hohe Leistung und eine geringe Arbeitsspeicherbelegung gelegt als auf eine große Bandbreite von Features. Die integrierte UTF-8-Unterstützung optimiert den Prozess des Lesens und Schreibens von JSON-Text, der als UTF-8 codiert ist. Dies ist die am häufigsten verwendete Codierung für Daten im Web und Dateien auf Datenträgern.
Die Bibliothek stellt außerdem Klassen für die Arbeit mit einem In-Memory-Dokumentobjektmodell (DOM) zur Verfügung. Diese Funktion ermöglicht einen zufälligen Zugriff auf die Elemente in einer JSON-Datei oder -Zeichenfolge.
Für Visual Basic gibt es einige Einschränkungen hinsichtlich der verwendbaren Teile der Bibliothek. Weitere Informationen finden Sie unter Visual Basic-Unterstützung.
Abrufen der Bibliothek
Die Bibliothek ist als Teil des gemeinsamen Frameworks für .NET Core 3.0 und höhere Versionen integriert. Die Quellgenerierungsfunktion ist als Teil des gemeinsamen Frameworks für .NET 6 und höhere Versionen integriert.
Installieren Sie für Frameworkversionen vor .NET Core 3.0 das NuGet-Paket System.Text.Json. Das Paket unterstützt:
- .NET Standard 2.0 und höher
- .NET Framework 4.6.2 und höher
- .NET 8 und höher
Namespaces und APIs
- Der System.Text.Json-Namespace enthält alle Einstiegspunkte und die Haupttypen.
- Der System.Text.Json.Serialization-Namespace enthält Attribute und APIs für erweiterte Szenarien und Anpassungen, die für die Serialisierung und Deserialisierung spezifisch sind.
- Der System.Net.Http.Json-Namespace enthält Erweiterungsmethoden für das Serialisieren und Deserialisieren von JSON-Nutzlasten aus dem Netzwerk.
Wichtig
System.Text.Json
unterstützt die folgenden Serialisierungs-APIs, die Sie möglicherweise zuvor verwendet haben, nicht:
- Attribute aus dem System.Runtime.Serialization-Namespace.
- Das System.SerializableAttribute-Attribut und die ISerializable-Schnittstelle. Diese Typen werden nur für die Binärserialisierung und die XML-Serialisierung verwendet.
Reflektion im Vergleich zur Quellgenerierung
Standardmäßig erfasst System.Text.Json
die Metadaten, die für den Zugriff auf Eigenschaften von Objekten für die Serialisierung und Deserialisierung zur Laufzeit erforderlich sind, mittels Reflexion. Alternativ kann System.Text.Json
das C#-Feature zur Quellgenerierung verwenden, um die Leistung zu verbessern, die Nutzung des privaten Arbeitsspeichers zu reduzieren und das Kürzen von Assemblys zu erleichtern, wodurch die App-Größe reduziert wird.
Weitere Informationen finden Sie unter Reflexion im Vergleich zur Quellgenerierung.
Informationen zur Sicherheit
Informationen zu Sicherheitsbedrohungen, die beim Entwerfen von JsonSerializer berücksichtigt wurden, und zu ihrer Entschärfung finden Sie unter System.Text.Json
Bedrohungsmodell.
Threadsicherheit
Der System.Text.Json
-Serialisierer wurde im Hinblick auf Threadsicherheit entwickelt. Praktisch bedeutet dies, dass JsonSerializerOptions-Instanzen nach der Sperrung sicher über mehrere Threads hinweg freigegeben werden können. JsonDocument stellt eine unveränderliche und in .NET 8 und höheren Versionen, threadsichere DOM-Darstellung für JSON-Werte bereit.