Dela via


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 talen används för att mappa med talegenskaper 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.

Dricks

  • Det finns ingen beteendeförändring för standardinställningen, fristående JsonSerializer eller JsonSerializerOptions.
  • Detta är tekniskt sett inte en icke-bakåtkompatibel ändring, eftersom det gör ett scenario mer tillåtande i stället för mer restriktivt (det vill: det lyckas tvinga fram ett tal 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.
  • Metoderna HttpClientJsonExtensions.GetFromJsonAsync och HttpContentJsonExtensions.ReadFromJsonAsync tilläggen Web använder också uppsättningen serialiseringsalternativ.

Version introducerad

5,0

Orsak till ändringen

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