Neu in .NET 10.0 [34]: Keine doppelten Attributwerte bei JSON-Deserialisierung

Die neue Einstellung "AllowDuplicateProperties = false" löst bei doppelten Werten in der JSON-Deserialisierung einen Laufzeitfehler aus.

vorlesen Druckansicht 2 Kommentare lesen
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.

Die JSON-Bibliothek System.Text.Json war bisher sehr tolerant bei der Deserialisierung von doppelten Attributwerten.

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.

Der folgende Programmcode fĂĽhrt bisher und auch im Standard System.Text.Json in .NET 10.0 nicht zu einem Laufzeitfehler:

 string json = """{ "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); 

In diesem Beispiel wird "LastName" zweimal gesetzt: einmal auf den Nachnamen und fälschlicherweise ein zweites Mal auf eine Website-URL. Dabei verwendet der JSON-Serializer immer den letzten Wert, das heißt, die Ausgabe ist nicht „Person: Holger Schwichtenberg“, sondern „Person: Holger www.IT-Visions.de“.

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.

In System.Text.Json gibt es seit .NET 10.0 Preview 6 bei den JsonSerializerOptions eine neue Eigenschaft AllowDuplicateProperties. Diese hat im Standard den Wert true. Mit der Umstellung auf false erreicht man, dass beim Deserialisieren von JSON-Dokumenten ein Laufzeitfehler entsteht, falls ein Attribut mehrfach gesetzt wird.

Videos by heise

Mit AllowDuplicateProperties = false fĂĽhrt diese Situation zu dem Laufzeitfehler

Duplicate property 'LastName' encountered during deserialization

sowohl beim Aufruf der Methode Deserialize() als auch beim Aufruf der Methode Parse().

Folgender Beispielcode nutzt AllowDuplicateProperties = false:

  try
  {
   CUI.H2("Deserialisierung mit AllowDuplicateProperties = false");
   JsonSerializerOptions options = new() { AllowDuplicateProperties = false };
   JsonSerializer.Deserialize<Person>(json, options); // JsonException
  }
  catch (Exception ex)
  {
   CUI.PrintError(ex);
  }
 
  try
  {
   CUI.H2("Parse mit AllowDuplicateProperties = false");
   JsonDocumentOptions docOptions = new() { AllowDuplicateProperties = false };
   JsonDocument.Parse(json, docOptions); // throws JsonException
  }
  catch (Exception ex)
  {
   CUI.PrintError(ex);
  }

(rme)