Mehr Sicherheit bei der Datenverarbeitung
Die Verarbeitung von JSON-Daten ist ein zentraler Bestandteil moderner Softwareentwicklung. Bisher zeigte sich die .NET-Bibliothek `System.Text.Json` bei der Deserialisierung von Objekten äußerst tolerant, wenn ein Attribut innerhalb eines JSON-Dokuments mehrfach definiert wurde. In der Praxis führte dies dazu, dass der Serializer bei doppelten Schlüsseln automatisch den jeweils letzten Wert übernahm. Ein solches Verhalten kann jedoch zu unerwünschten Ergebnissen führen, da fehlerhafte oder manipulierte Daten unbemerkt in die Anwendung gelangen.
Das Problem mit doppelten Attributen
In bisherigen Versionen von .NET wurde ein JSON-Objekt, das einen Schlüssel mehrfach enthielt, ohne Fehlermeldung verarbeitet. Wenn beispielsweise ein Feld wie „LastName“ zweimal mit unterschiedlichen Inhalten belegt wird, überschreibt der zweite Wert den ersten. Dies ist besonders kritisch, wenn die Daten aus unsicheren Quellen stammen oder durch Übertragungsfehler korrumpiert wurden. Entwickler erhielten bisher keine Warnung, dass die Datenstruktur nicht eindeutig war, was das Debugging bei fehlerhaften Datensätzen erschwerte.
Die Neuerung in .NET 10.0: AllowDuplicateProperties
Mit der Einführung von .NET 10.0 (ab Preview 6) reagiert Microsoft auf dieses Sicherheits- und Konsistenzrisiko. Über die `JsonSerializerOptions` steht nun die neue Eigenschaft `AllowDuplicateProperties` zur Verfügung. Standardmäßig ist diese auf `true` gesetzt, um die Abwärtskompatibilität zu bestehenden Anwendungen zu gewährleisten.
Setzt ein Entwickler diesen Wert jedoch explizit auf `false`, ändert sich das Verhalten grundlegend:
* **Laufzeitfehler bei Duplikaten:** Sobald der Serializer auf ein Attribut stößt, das bereits zuvor im aktuellen Kontext verarbeitet wurde, wird eine `JsonException` geworfen.
* **Umfassende Anwendung:** Diese Prüfung greift sowohl bei der klassischen Deserialisierung mittels `JsonSerializer.Deserialize()` als auch bei der Arbeit mit dem `JsonDocument` über die Methode `JsonDocument.Parse()`.
Implementierung in der Praxis
Um die neue Funktion zu nutzen, müssen die Konfigurationsoptionen entsprechend angepasst werden. Bei der Verwendung des `JsonSerializer` sieht dies wie folgt aus:
```csharp
JsonSerializerOptions options = new() { AllowDuplicateProperties = false };
var result = JsonSerializer.Deserialize<Person>(json, options);
```
Sollte das JSON-Dokument nun doppelte Schlüssel enthalten, bricht der Prozess mit einer `JsonException` ab. Dies zwingt Entwickler dazu, die Datenqualität bereits an der Schnittstelle sicherzustellen, anstatt sich auf die implizite Überschreibungslogik zu verlassen.
Bedeutung für die Softwarequalität
Die Einführung dieser Option ist ein wichtiger Schritt zur Erhöhung der Robustheit von .NET-Anwendungen. Durch das explizite Verbot von doppelten Attributwerten können Entwickler sicherstellen, dass die deserialisierten Objekte exakt den Erwartungen entsprechen. Dies ist besonders in Szenarien relevant, in denen Datenintegrität oberste Priorität hat, etwa bei der Verarbeitung von API-Anfragen oder Konfigurationsdateien.
Für bestehende Systeme empfiehlt es sich, die Verwendung von `AllowDuplicateProperties = false` schrittweise zu evaluieren. Während die Umstellung in neuen Projekten sofort für mehr Sicherheit sorgt, sollte bei gewachsenen Systemen geprüft werden, ob eingehende JSON-Payloads möglicherweise legitime Duplikate enthalten, die bisher stillschweigend akzeptiert wurden. Die neue Funktion bietet somit ein präzises Werkzeug, um die Kontrolle über die Datenverarbeitung zu verschärfen und potenzielle Fehlerquellen frühzeitig zu eliminieren.