ASP.NET Core-Apps erlauben die Deserialisierung von Zahlen in Anführungszeichen
Ab .NET 5 verwenden ASP.NET Core-Apps, wie von JsonSerializerDefaults.Web angegeben, die Standardoptionen für die Deserialisierung. Die Web-Optionen umfassen das Festlegen von NumberHandling auf JsonNumberHandling.AllowReadingFromString. Diese Änderung bedeutet, dass ASP.NET Core-Apps alle Zahlen, die als JSON-Zeichenfolgen dargestellt sind, erfolgreich deserialisieren können, anstatt eine Ausnahme auszulösen.
Änderungsbeschreibung
In .NET Core 3.0 bis 3.1 löst JsonSerializer während der Deserialisierung eine Ausnahme des Typs JsonException aus, wenn JSON-Nutzdaten eine Zahl in Anführungszeichen enthalten. Mithilfe der in Anführungszeichen gesetzten Zahlen werden Zuordnungen zu Zahleneigenschaften in Objektgraphen vorgenommen. In .NET Core 3.0 bis 3.1 werden Zahlen nur aus JsonTokenType.Number-Token gelesen.
Ab .NET 5 gelten in Anführungszeichen gesetzte Zahlen in JSON-Nutzdaten für ASP.NET Core-Apps standardmäßig als gültig. Während der Deserialisierung von in Anführungszeichen gesetzten Zahlen wird keine Ausnahme ausgelöst.
Tipp
- Es gibt keinen Behavior Change für die eigenständigen Standardklassen JsonSerializer oder JsonSerializerOptions.
- Dies ist fachlich gesehen kein Breaking Change, da diese Änderung zu liberaleren statt restriktiveren Szenarios führt (d. h., eine JSON-Zeichenfolge wird erfolgreich in eine Zahl konvertiert, anstatt eine Ausnahme auszulösen). Da es sich hierbei jedoch um einen bedeutenden Behavior Change handelt, der sich auf viele ASP.NET Core-Apps auswirkt, wird er hier dokumentiert.
- Die Erweiterungsmethoden HttpClientJsonExtensions.GetFromJsonAsync und HttpContentJsonExtensions.ReadFromJsonAsync verwenden ebenfalls die Web-Serialisierungsoptionen.
Eingeführt in Version
5.0
Grund für die Änderung
Viele Benutzer haben um eine Möglichkeit für einen liberaleren Umgang mit Zahlen in JsonSerializer gebeten. Dieses Feedback zeigt, dass viele Entitäten, die JSON erzeugen (z. B. Dienste im Web), Zahlen in Anführungszeichen ausgeben. Wenn Sie das Lesen von in Anführungszeichen gesetzten Zahlen zulassen (Deserialisierung), können .NET-Apps diese Nutzdaten standardmäßig erfolgreich in Webkontexten analysieren. Die Konfiguration wird über JsonSerializerDefaults.Web verfügbar gemacht, sodass Sie dieselben Optionen für verschiedene Anwendungsebenen angeben können, z. B. Client, Server und freigegeben.
Empfohlene Maßnahme
Ist diese Änderung disruptiv, weil Sie z. B. bei Überprüfungen von einer strikten Zahlenverarbeitung abhängig sind, können Sie das vorherige Verhalten wiederherstellen. Legen Sie einfach die Option JsonSerializerOptions.NumberHandling auf JsonNumberHandling.Strict fest.
Für MVC- und Web-API-Apps in ASP.NET Core können Sie mithilfe des folgenden Codes die Option in Startup
konfigurieren:
services.AddControllers()
.AddJsonOptions(options => options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.Strict);