Novidades do ASP.NET Core 3.0: mudanças no suporte a JSON
Ao criar um novo projeto baseado no ASP.NET Core 3.0 muitos Desenvolvedores devem ter notado ligeiras diferenças em relações a versões anteriores, como a presença de uma referência para o package Microsoft.AspNetCore.Mvc.NewtonsoftJson no arquivo .csproj:
Além de uma chamada ao método AddNewtonsoftJson em ConfigureServices na classe Startup:
Esta abordagem ainda continua com o Preview 5 do ASP.NET Core 3.0 (versão mais atual quando da publicação deste artigo), muito embora deva ficar de lado em releases posteriores.
Existe de fato todo um trabalho para que o projeto Newtonsoft.Json deixe de representar a opção default para a manipulação de JSON dentro do ASP.NET Core, com a substituição do mesmo por recursos mais performáticos que integram agora um novo namespace: System.Text.Json.
Durante o Microsoft Build 2019 tivemos uma postagem no blog oficial do ASP.NET na qual foi informada a possibilidade de uso de um novo serializer baseado em System.Text.Json (não havia esta alternativa até o Preview 4). Inclusive um comparativo com cenários de serialização e deserialização foi publicado, de forma a destacar os ganhos que a nova opção traz em relação ao projeto Newtonsoft.Json:
Diante disso, como podemos configurar um projeto para que utilize recursos que integram o namespace System.Text.Json na manipulação de dados no padrão JSON?
O primeiro passo consiste em remover o package Microsoft.AspNetCore.Mvc.NewtonsoftJson do projeto, algo que pode ser feito por meio da seguinte instrução:
dotnet remove package Microsoft.AspNetCore.Mvc.NewtonsoftJson
A classe Startup também passará por alterações:
- A chamada a AddNewtonsoftJson será retirada do método ConfigureServices;
- No método AddControllers é possível especificar as opções de serialização para o formato JSON. No caso do exemplo da próxima listagem, a propriedade WriteIndented do objeto associado a SerializerOptions foi configurada de forma que os retornos em JSON produzidos pelo projeto venham indentados. A propriedade SerializerOptions contém uma instância de JsonSerializerOptions (namespace System.Text.Json.Serialization), novo serializador JSON que integra o .NET Core 3.0.
O resultado ao acessar um projeto configurado para uso do novo serializer em nada irá diferir de versões anteriores (que empregavam o pacote Newtonsoft.Json). É o que demonstra a imagem a seguir: