Share via


Las aplicaciones ASP.NET Core permiten deserializar los números entrecomillados

A partir de .NET 5, las aplicaciones ASP.NET Core usan las opciones predeterminadas de deserialización especificadas mediante JsonSerializerDefaults.Web. El conjunto de opciones Web incluye el establecimiento de NumberHandling en JsonNumberHandling.AllowReadingFromString. Este cambio significa que las aplicaciones ASP.NET Core van a deserializar correctamente los números representados como cadenas JSON, en lugar de iniciar una excepción.

Descripción del cambio

En .NET Core 3.0-3.1, JsonSerializer produce una JsonException durante la deserialización si encuentra un número entrecomillado en una carga JSON. Los números entrecomillados se usan para asignar con propiedades de número en gráficos de objetos. En .NET Core 3.0-3.1, los números solo se leen de tokens JsonTokenType.Number.

A partir de .NET 5, los números entrecomillados de las cargas JSON se consideran válidos, de manera predeterminada, para las aplicaciones ASP.NET Core. No se produce ninguna excepción durante la deserialización de números entrecomillados.

Sugerencia

  • No hay ningún cambio de comportamiento en el elemento JsonSerializer o JsonSerializerOptions independiente predeterminado.
  • Técnicamente, esto no es un cambio importante, ya que hace que un escenario sea más permisivo en lugar de más restrictivo (es decir, que tiene éxito a la hora de forzar un número de una cadena JSON en lugar de producir una excepción). Pero, puesto que se trata de un cambio de comportamiento considerable que afecta a muchas aplicaciones ASP.NET Core, se documenta aquí.
  • Los métodos de extensión HttpClientJsonExtensions.GetFromJsonAsync y HttpContentJsonExtensions.ReadFromJsonAsync también usan el conjunto de opciones de serialización Web.

Versión introducida

5.0

Motivo del cambio

Varios usuarios han solicitado una opción para un control de los números más permisivo en JsonSerializer. Este comentario indica que muchos productores JSON (por ejemplo, servicios en la web) emiten números entrecomillados. Al permitir que los números entrecomillados se lean (deserializados), las aplicaciones .NET pueden analizar correctamente estas cargas, de manera predeterminada, en contextos web. La configuración se expone mediante JsonSerializerDefaults.Web para que se puedan especificar las mismas opciones en diferentes capas de aplicación, por ejemplo, cliente, servidor y compartida.

Si este cambio es problemático, por ejemplo, si depende del control de números estricto para la validación, puede volver a habilitar el comportamiento anterior. Establezca la opción JsonSerializerOptions.NumberHandling en JsonNumberHandling.Strict.

En el caso de las aplicaciones de MVC de ASP.NET Core y API web, puede configurar la opción en Startup mediante el código siguiente:

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

API afectadas