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.
(Bild: Pincasso / Shutterstock.com)
- Dr. Holger Schwichtenberg
Der JSON-Serialisierer System.Text.Json bietet in Version 10.0 unter JsonSerializationOptions.Strict neue Optionen an, darunter JSON AllowDuplicateProperties = false.
JsonSerializationOptions.Strict setzt Einstellungen, die Microsoft in den Release Notes als „Best Practices“ bezeichnet:
UnmappedMemberHandling = DisallowAllowDuplicateProperties = falseRespectNullableAnnotations = trueRespectRequiredConstructorParameters = true
(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)