Delen via


ASP.NET Core-apps kunnen geciteerde getallen deserialiseren

Vanaf .NET 5 gebruiken ASP.NET Core-apps de standaarddeserialisatieopties zoals opgegeven door JsonSerializerDefaults.Web. Web opties omvat de instelling van NumberHandling naar JsonNumberHandling.AllowReadingFromString. Deze wijziging betekent dat ASP.NET Core-apps getallen die worden weergegeven als JSON-tekenreeksen, deserialiseren in plaats van een uitzondering te genereren.

Beschrijving wijzigen

In .NET Core 3.0 - 3.1 werpt JsonSerializer een JsonException gedurende deserialisatie als het een geciteerd getal tegenkomt in een JSON-payload. De geciteerde getallen worden gebruikt om te koppelen aan getaleigenschappen in objectdiagrammen. In .NET Core 3.0 - 3.1 worden getallen alleen gelezen uit JsonTokenType.Number tokens.

Vanaf .NET 5 worden getallen in JSON-nettoladingen standaard beschouwd als geldig voor ASP.NET Core-apps. Er wordt geen uitzondering opgeworpen tijdens de deserialisatie van geciteerde getallen.

Aanbeveling

  • Er is geen gedragswijziging voor de standaard, zelfstandige JsonSerializer of JsonSerializerOptions.
  • Dit is technisch gezien geen belangrijke wijziging, omdat het een scenario meer permissief maakt in plaats van meer beperkend (dat wil gezegd, het lukt om een getal van een JSON-tekenreeks te dwingen in plaats van een uitzondering te genereren). Omdat dit echter een aanzienlijke gedragswijziging is die van invloed is op veel ASP.NET Core-apps, wordt dit hier beschreven.
  • De HttpClientJsonExtensions.GetFromJsonAsync en HttpContentJsonExtensions.ReadFromJsonAsync uitbreidingsmethoden gebruiken ook de Web set van serialisatieopties.

Geïntroduceerde versie

5,0

Reden voor wijziging

Meerdere gebruikers hebben een optie aangevraagd voor een meer permissieve omgang met nummers in JsonSerializer. Deze feedback geeft aan dat veel JSON-producenten (bijvoorbeeld services op het web) geciteerde getallen uitzenden. Door het toestaan van het lezen (deserialiseren) van geciteerde getallen, kunnen .NET-apps deze gegevens standaard succesvol parseren in webcontexten. De configuratie wordt weergegeven via JsonSerializerDefaults.Web , zodat u dezelfde opties kunt opgeven voor verschillende toepassingslagen, bijvoorbeeld client, server en gedeeld.

Als deze wijziging verstorend is, bijvoorbeeld als u afhankelijk bent van de strikte verwerking van getallen voor validatie, kunt u het vorige gedrag opnieuw inschakelen. Stel de JsonSerializerOptions.NumberHandling optie in op JsonNumberHandling.Strict.

Voor ASP.NET Core MVC- en web-API-apps kunt u de optie Startup configureren met behulp van de volgende code:

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

Betreffende API's