ASP.NET Core-appar tillåter deserialisering av citerade tal

Från och med .NET 5 använder ASP.NET Core-appar standardalternativen för deserialisering som anges av JsonSerializerDefaults.Web. Uppsättningen Web med alternativ innehåller inställningen NumberHandling till JsonNumberHandling.AllowReadingFromString. Den här ändringen innebär att ASP.NET Core-appar kommer att deserialisera tal som representeras som JSON-strängar i stället för att utlösa ett undantag.

Ändra beskrivning

I .NET Core 3.0 – 3.1 JsonSerializer utlöser en JsonException under deserialisering om den stöter på ett citerat nummer i en JSON-nyttolast. De angivna numren används för att matcha med nummeregenskaper i objektdiagram. I .NET Core 3.0– 3.1 läss bara siffror från JsonTokenType.Number token.

Från och med .NET 5 anses citerade nummer i JSON-nyttolaster som giltiga som standard för ASP.NET Core-appar. Inget undantag utlöses under deserialiseringen av citerade tal.

Tips/Råd

  • Det finns ingen beteendeförändring för standardinställningen, fristående JsonSerializer eller JsonSerializerOptions.
  • Detta är tekniskt sett inte en bakåtkompatibel ändring, eftersom det gör ett scenario mer tillåtande i stället för mer restriktivt (det vill säga: det lyckas konvertera en siffra från en JSON-sträng i stället för att utlösa ett undantag). Men eftersom detta är en betydande beteendeförändring som påverkar många ASP.NET Core-appar, dokumenteras den här.
  • Utökningsmetoderna HttpClientJsonExtensions.GetFromJsonAsync och HttpContentJsonExtensions.ReadFromJsonAsync använder också uppsättningen Web av serialiseringsalternativ.

Version lanserad

5,0

Orsak till ändring

Flera användare har begärt ett alternativ för mer tillåtande nummerhantering i JsonSerializer. Den här feedbacken anger att många JSON-producenter (till exempel tjänster på webben) genererar citerade nummer. Genom att tillåta att citerade tal läses (deserialiseras) kan .NET-appar som standard parsa dessa nyttolaster i webbkontexter. Konfigurationen exponeras via JsonSerializerDefaults.Web så att du kan ange samma alternativ i olika programlager, till exempel klient, server och delad.

Om den här ändringen till exempel är störande om du är beroende av den strikta nummerhanteringen för validering kan du återaktivera det tidigare beteendet. Ange alternativet JsonSerializerOptions.NumberHandling till JsonNumberHandling.Strict.

För ASP.NET Core MVC- och webb-API-appar kan du konfigurera alternativet i Startup med hjälp av följande kod:

services.AddControllers()
   .AddJsonOptions(options => options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.Strict);

Berörda API:er