Sie sind hier:
Wissen
Telefon (Mo-Fr 9 bis 16 Uhr):
+49 (0)201 649590-50
|
Kontaktformular
Buy me a coffee
MENU
Medien
Übersicht
Lexikon/Glossar
Spickzettel
Weblog
Konferenzvorträge
Fachbücher
Fachartikel
Leserportal
Autoren gesucht!
Literaturtipps
Praxisnahe Fallbeispiele
Downloads
Newsletter
.NET
Startseite
.NET 8.0
.NET 7.0
.NET 6.0
.NET 5.0
.NET Core
.NET 4.0/4.5.x/4.6.x
.NET 3.0/3.5
.NET 2.0
.NET-Lexikon
Entwicklerwerkzeuge
Klassenreferenz
Softwarekomponenten
Windows Runtime
World Wide Wings-Demo
Versionsgeschichte
Codebeispiele
ASP.NET
Artikel
Bücher
Schulung & Beratung
Konferenzen/Events
ASP.NET
Startseite
Lexikon
Sicherheit
Konfiguration
Global.asax
Tracing
Technische Beiträge
Klassenreferenz
Entwicklerwerkzeuge
Softwarekomponenten
Forum
Schulung & Beratung
PowerShell
Startseite
Commandlet-Referenz
Codebeispiele
Commandlet Extensions
Versionsgeschichte
Schulungen+Beratung
Windows
Startseite
Windows Runtime (WinRT)
Windows PowerShell
Windows Scripting
Windows-Schulungen
Windows-Lexikon
Windows-Forum
Scripting
Startseite
Lexikon
FAQ
Bücher
Architektur
Skriptsprachen
Scripting-Hosts
Scripting-Komponenten
COM/DCOM/COM+
ADSI
WMI
WMI-Klassenreferenz
Scripting-Tools
WSH-Editoren
Codebeispiele
.NET-Scripting
Forum
Schulung & Beratung
Nutzer
Anmeldung/Login
Buchleser-Registrierung
Gast-Registrierung
Hilfe
Website-FAQ
Technischer Support
Site Map
Tag Cloud
Suche
Kontakt
Erklärung des Begriffs: System.Text.Json (STJ)
Begriff
System.Text.Json
Abkürzung
STJ
Eintrag zuletzt aktualisiert am
18.11.2024
Zur Stichwortliste unseres Lexikons
Was ist
System.Text.Json
?
Microsoft kehrt seit
.NET Core 3.0
ab von JSON.NET und wirft mit dem
Nuget-Paket
System.Text
.Json (manchmal von Microsoft abgekürzt als "STJ") einen neuen JSON-Serializer in den Ring, der schneller als JSON.NET ist, aber nicht alle Funktionen wie JSON.NET bietet.
Viele Jahre hat Microsoft in .NET bei der Verarbeitung von Dokumenten und
Webservice
aufrufen in der beliebten
JavaScript Object Notation
(JSON) auf die
Open Source
-Drittanbieter-
Softwarekomponente
"Newtonsoft JSON" (alias JSON.NET) von James Newton-King, der mittlerweile für Microsoft in Neuseeland arbeitet, gesetzt. Im Zuge von
.NET Core 3.0
entwickelte das .NET-Entwicklungsteam in Redmond aber nun wieder eine eigene
Softwarekomponente
für die JSON-Serialisierung und -
Deserialisierung
mit Namen "
System.Text
.Json".
Kompatibilität
Im Gegensatz zu anderen Teilen des modernen .NET (z.B. ASP.NET Core und
Blazor
) läuft
System.Text
.Json nicht nur auf dem modernen .NET, sondern auch auf deutlich älteren .NET-Versionen.
System.Text
.Json funktioniert mit dem klassischen
.NET Framework
ab Version 4.6.2 und dem modernen .NET ab Version 2.0. Dazu ist die Bibliothek als NuGet-Paket verfügbar.
Vergleich mit Newtonsoft JSON (alias JSON.NET) von James Newton-King
System.Text
.Json ist bei der Serialisierung und
Deserialisierung
von JSON schneller als JSON.NET.
System.Text
.Json beherrscht aber nicht alle Funktionen von JSON.NET und ist auch bei der Serialisierung /
Deserialisierung
nicht immer kompatibel.
Warum eine neue JSON-Komponente?
Es gab eine Meinungsverschiedenheit (von einem Zerwürfnis zu sprechen, scheint übertrieben) zwischen James Newton-King und seinem Arbeitgeber Microsoft, die überhaupt der Grund dafür ist, das Microsoft seit
.NET Core 3.0
strategisch von JSON.NET abgekehrt ist. Microsoft wollte, das JSON.NET durch den Einsatz der neueren Speicherzugriffs-APIs (Span<T>) beschleunigt wird. James Newton-King sah in dieser gravierenden Implementierungsänderung aber die Gefahr von Breaking Changes, also dem Verlust der Kompatibilität.
Kommentar von James Newton-King dazu ist: "Unfortunately, Json.NET's wealth of features and popularity works against making major changes to it. Supporting new technologies like Span would require fundamental breaking changes to the library and would disrupt existing applications and libraries that depend on it." (dies wird von Microsoft zitiert in [
https://github.com/dotnet/announcements/issues/90
]).
Immerhin gibt es für ASP.NET Core ab Version 3.0 weiterhin die Option, beim bisherigen JSON.NET bleiben. Dafür installiert man das
Nuget-Paket
Microsoft.AspNetCore.Mvc.NewtonsoftJson und ruft in ConfigureServices() die
Methode
nach AddControllers() noch AddNewtonsoftJson() auf:
public void ConfigureServices(IServiceCollection services)
{
…
services.AddControllers().AddNewtonsoftJson()
…
}
Dies wird wohl für einige Zeit noch Standard in den meisten
ASP.NET Core WebAPI
-Entwicklungsprojekten sein, denn
System.Text
.Json hat einen weiteren Mangel: Man kann damit bisher nicht automatisch
Metadaten
im
Swagger
Open API-Format erzeugen (vgl. "Support for OpenAPI /
Swagger
when using
System.Text
.Json is ongoing and unlikely to be available as part of the 3.0 release." [
https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/
]).
Highlights der Neuerungen in
System.Text
.Json 6.0 (erschienen Nov 2021 zusammen mit
.NET 6.0
)
Source Generator
JsonNode: Veränderbares DOM
IAsyncEnumberable
Highlights der Neuerungen in
System.Text
.Json 7.0 (erschienen Nov 2022 zusammen mit
.NET 7.0
)
Contract
-Anpassungen per Code
Polymorphismus
Unterstützung für Pflichtmitglieder (nur bei
Reflection
, nicht für
Source Generator
)
Highlights der Neuerungen in
System.Text
.Json 8.0 (erschienen Nov 2023 zusammen mit
.NET 8.0
)
Konfigurierbare
Namenskonvention
en
Handhabung für fehlende Informationen bei der
Deserialisierung
Verbesserungen für den JSON
Source Generator
Neue Datentypen bei
System.Text
.Json
Serialisierung nicht öffentlicher Mitglieder bei
System.Text
.Json
Erweiterungen der Klassen JsonNode und JsonArray
Annotation
für eigene Konverter
Highlights der Neuerungen in
System.Text
.Json 9.0 (erschienen Nov 2024 zusammen mit
.NET 9.0
)
Neue Einstellungen in JsonSerializerOptions
- Berücksichtigung von Nullable-Kontext und [DisallowNull]: RespectNullable
Annotation
s
Berücksichtigung verpflichtender Konstruktorparameter: RespectRequiredConstructorParameters
Einrückungen anpassen: IndentCharacter und IndentSize
Flexibilität bei der Position von Typ-
Metadaten
($type): AllowOutOfOrderMetadataProperties
JsonSerializerOptions.Web liefert Einstellungen, die
ASP.NET Core WebAPI
verwendet
Weitere neue Einstellungen
Anpassung der Serialisierung von
Enumeration
smitgliedsnamen: [JsonStringEnumMemberName("xy")]
Lesen von Multi-JSON-Dokumenten: AllowMultipleValues in JsonReaderOptions für Utf8JsonReader
Weitere Neuerungen
Klasse JsonSchemaExporter:
Metadaten
für JSON-Dokument generieren wie bei OpenAPI
Neue
Methode
DeepEquals() in der Klasse JsonElement
Querverweise zu anderen Begriffen im Lexikon
JavaScript Object Notation (JSON)
ASP.NET Core WebAPI
Softwarekomponente
Source Generator
Namenskonvention
Deserialisierung
.NET Framework
.NET Core 3.0
Enumeration
Open Source
System.Text
Nuget-Paket (nupkg)
Annotation
Reflection
Webservice
Metadaten
.NET 8.0 (.NET 8)
.NET 7.0 (.NET 7)
.NET 6.0 (.NET 6)
Contract
.NET 9.0 (.NET 9)
Methode
Swagger
Blazor
Beratung & Support
Anfrage für Beratung/Consulting zu System.Text.Json STJ
Gesamter Beratungsthemenkatalog
Technischer Support zum System.Text.Json STJ
Schulungen zu diesem Thema
NestJS
.NET 8.0 - Änderungen und Neuerungen gegenüber .NET 7.0
.NET 7.0 - Änderungen und Neuerungen gegenüber .NET 6.0
Neuerungen in .NET Core 3.0/3.1 gegenüber Version 2.x (inkl. ASP.NET Core, Entity Framework Core, WPF und Windows Forms)
.NET 6.0 - Änderungen und Neuerungen gegenüber .NET 5.0
.NET-Entwickler-Update 2025
node.js - Entwicklung hoch-skalierbarer Webanwendungen und/oder WebAPIs/REST-Dienste mit JavaScript (oder TypeScript) auf dem Server
Anfrage für eine individuelle Schulung zum Thema System.Text.Json STJ
Gesamter Schulungsthemenkatalog
Bücher zu diesem Thema
Alle unsere aktuellen Fachbücher
E-Book-Abo für ab 99 Euro im Jahr