Neu in .NET 10.0 [36]: Neue Einstellungssammlung mit Best Practices für JSON

Mit JsonSerializationOptions.Strict aktiviert man mehrere strengere Einstellungen für die Deserialisierung von JSON-Inhalten.

vorlesen Druckansicht
Verkehrsschild mit Aufschrift .NET

(Bild: Pincasso / Shutterstock.com)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg
close notice

This article is also available in English. It was translated with technical assistance and editorially reviewed before publication.

Der JSON-Serialisierer System.Text.Json bietet in Version 10.0 unter JsonSerializationOptions.Strict neue Optionen an, darunter JSON AllowDuplicateProperties = false.

Der Dotnet-Doktor – Holger Schwichtenberg
Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

JsonSerializationOptions.Strict setzt Einstellungen, die Microsoft in den Release Notes als „Best Practices“ bezeichnet:

  • UnmappedMemberHandling = Disallow
  • AllowDuplicateProperties = false
  • RespectNullableAnnotations = true
  • RespectRequiredConstructorParameters = true

Vergleich der Eigenschaften von JsonSerializerOptions.Default (oben) und JsonSerializerOptions.Strict (unten) (Abb. 1)
Heise-Konferenz: betterCode() .NET 11.0
betterCode() .NET 11.0

(Bild: King / stock.adobe.com)

Das ist neu in .NET 11.0: Dr. Holger Schwichtenberg und weitere Experten präsentieren am 17. November 2026 auf der Online-Konferenz betterCode() .NET 11.0 die Änderungen für Entwicklerinnen und Entwickler. Tickets zum Frühbucherpreis sind im Online-Shop verfügbar.

Diese Einstellungen sind lesekompatibel mit JsonSerializationOptions.Default, das heißt, ein mit JsonSerializationOptions.Default serialisiertes Objekt kann mit JsonSerializationOptions.Strict deserialisiert werden. Der folgende Codeausschnitt führt zum Laufzeitfehler „The JSON property 'ID' could not be mapped to any .NET member contained in type 'Person'.“:

public void JSONStrict()
{
 CUI.Demo(nameof(JSONStrict));
 
 CUI.H2("JSON-Dokumente mit doppelten Eigenschaften");
 string json = """{ "ID": 123, "FirstName": "Holger", "LastName": "Schwichtenberg", "LastName": "www.IT-Visions.de" }""";
 Console.WriteLine(json);
 
 CUI.H2("Deserialisierung im Standard");
 var person = JsonSerializer.Deserialize<Person>(json);
 Console.WriteLine(person); // AUSGABE: Person: Holger www.IT-Visions.de
 
 try
 {
  CUI.H2("Deserialisierung mit JsonSerializerOptions.Strict");
  Console.WriteLine(JsonSerializerOptions.Strict.ToNameValueString());
  JsonSerializer.Deserialize<Person>(json, JsonSerializerOptions.Strict); // throws JsonException "The JSON property 'ID' could not be mapped to any .NET member"
 }
 catch (Exception ex)
 {
  CUI.PrintError(ex);
 }
}

Der zweite Fehler des doppelten Wertes für "LastName" wird nicht ausgegeben, da System.Text.Json leider immer nur den ersten Fehler liefert.

JsonSerializationOptions.Strict kann auch beim Serialisieren eingesetzt werden. Allerdings machen die meisten Einstellungen dabei keinen Unterschied.

Videos by heise

Hier ist ein Beispiel, in dem JsonSerializerOptions.Strict einen Unterschied bei Serialize() macht:

#nullable enable

Wenn man dann eine Property in Person auf null lässt, kommt:

The property or field 'PrivateEmail' on type 'Person' doesn't allow getting null values.

Das liegt daran, dass JsonSerializerOptions.Strict die Eigenschaft RespectNullableAnnotations = true setzt. Das ist aber im engeren Sinne nicht neu in .NET 10.0. RespectNullableAnnotations wurde in .NET 9.0 eingeführt.

(rme)