Share via


Aplicativos ASP.NET Core permitem a desserialização de números entre aspas

A partir do .NET 5, aplicativos ASP.NET Core usam as opções padrão de desserialização conforme especificado por JsonSerializerDefaults.Web. O conjunto Web de opções inclui definir NumberHandling como JsonNumberHandling.AllowReadingFromString. Essa alteração significa que os aplicativos ASP.NET Core desserializarão com êxito os números representados como cadeias de caracteres JSON em vez de gerar uma exceção.

Descrição das alterações

No .NET Core 3.0 a 3.1, JsonSerializer gera um JsonException durante a desserialização se encontrar um número entre aspas em um conteúdo JSON. Os números entre aspas são usados para mapear números as propriedades em grafos de objetos. No .NET Core 3.0 a 3.1, os números são lidos somente de tokens JsonTokenType.Number.

A partir do .NET 5, os números entre aspas em conteúdos JSON são considerados válidos, por padrão, para aplicativos ASP.NET Core. Nenhuma exceção é gerada durante a desserialização dos números entre aspas.

Dica

  • Não há nenhuma alteração de comportamento para o padrão, JsonSerializer ou JsonSerializerOptions autônomo.
  • Tecnicamente, isso não é uma alteração interruptiva, pois torna um cenário mais permissivo em vez de mais restritivo (ou seja, ele consegue coagir um número de uma cadeia de caracteres JSON em vez de lançar uma exceção). No entanto, como essa é uma alteração de comportamento significativa que afeta muitos aplicativos ASP.NET Core, ela está documentada aqui.
  • Os métodos de extensão HttpClientJsonExtensions.GetFromJsonAsync e HttpContentJsonExtensions.ReadFromJsonAsync também usam o conjunto de opções de serialização Web.

Versão introduzida

5,0

Motivo da alteração

Vários usuários solicitaram uma opção para tratamento de números mais permissivos em JsonSerializer. Esses comentários indicam que muitos produtores de JSON (por exemplo, serviços na Web) usam os números entre aspas. Ao permitir que os números entre aspas sejam lidos (desserializados), os aplicativos .NET podem analisar esses conteúdos com êxito, por padrão, em contextos da Web. A configuração é exposta por meio de JsonSerializerDefaults.Web para que você possa especificar as mesmas opções em diferentes camadas de aplicativo, por exemplo, cliente, servidor e compartilhado.

Se essa alteração for disruptiva, por exemplo, se você depender do tratamento de número estrito para validação, poderá habilitar novamente o comportamento anterior. Defina a opção JsonSerializerOptions.NumberHandling como JsonNumberHandling.Strict.

Para o MVC do ASP.NET Core e aplicativos de API Web, você pode configurar a opção em Startup usando o seguinte código:

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

APIs afetadas