aplikacje ASP.NET Core umożliwiają deserializowanie liczb cytowanych

Począwszy od platformy .NET 5, ASP.NET Core aplikacje używają domyślnych opcji deserializacji określonych przez JsonSerializerDefaults.Web. Zestaw Web opcji obejmuje ustawienie NumberHandling .JsonNumberHandling.AllowReadingFromString Ta zmiana oznacza, że aplikacje ASP.NET Core pomyślnie zdeserializuje liczby reprezentowane jako ciągi JSON zamiast zgłaszać wyjątek.

Opis zmiany

W programie .NET Core 3.0 — 3.1 zgłasza JsonException błąd podczas deserializacji, JsonSerializer jeśli napotka liczbę w cudzysłowie w ładunku JSON. Liczby cytowane są używane do mapowania z właściwościami liczbowymi w grafach obiektów. W programie .NET Core 3.0 — 3.1 liczby są odczytywane tylko z JsonTokenType.Number tokenów.

Począwszy od platformy .NET 5, liczby cytowane w ładunkach JSON są domyślnie uznawane za prawidłowe dla aplikacji ASP.NET Core. Podczas deserializacji liczb cytowanych nie jest zgłaszany żaden wyjątek.

Napiwek

  • Nie ma żadnych zmian zachowania dla domyślnego, autonomicznego JsonSerializer lub JsonSerializerOptions.
  • Technicznie nie jest to zmiana powodująca niezgodność, ponieważ sprawia, że scenariusz bardziej restrykcyjny zamiast bardziej restrykcyjny (oznacza to, że następuje powodzenie w zmuszaniu liczby z ciągu JSON zamiast zgłaszania wyjątku). Jednak ponieważ jest to znacząca zmiana behawioralna, która wpływa na wiele aplikacji ASP.NET Core, udokumentowana jest tutaj.
  • Metody HttpClientJsonExtensions.GetFromJsonAsync i HttpContentJsonExtensions.ReadFromJsonAsync używają również Web zestawu opcji serializacji.

Wprowadzona wersja

5,0

Przyczyna wprowadzenia zmiany

Wielu użytkowników zażądało opcji obsługi większej liczby permissywnej w systemie JsonSerializer. Ta opinia wskazuje, że wielu producentów JSON (na przykład usług w sieci Web) emituje cytowane liczby. Zezwalając na odczytywanie cytowanych liczb (deserializowane), aplikacje platformy .NET mogą domyślnie analizować te ładunki w kontekstach internetowych. Konfiguracja jest uwidoczniona za pośrednictwem JsonSerializerDefaults.Web programu , dzięki czemu można określić te same opcje w różnych warstwach aplikacji, na przykład klienta, serwera i udostępnionego.

Jeśli ta zmiana jest destrukcyjna, na przykład jeśli zależysz od ścisłej obsługi liczby na potrzeby walidacji, możesz ponownie włączyć poprzednie zachowanie. JsonSerializerOptions.NumberHandling Ustaw opcję na JsonNumberHandling.Strict.

W przypadku aplikacji ASP.NET Core MVC i internetowych interfejsów API można skonfigurować tę opcję Startup przy użyciu następującego kodu:

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

Dotyczy interfejsów API