Novidades do .NET 9: serialização utilizando JsonSerializerOptions.Web (no padrão do ASP.NET Core)
Neste novo artigo dou continuidade à série que iniciei recentemente sobre novidades do .NET 9, abordando desta vez uma melhoria na serialização de dados no formato JSON: a possibilidade de serializar um objeto com as mesmas configurações default do ASP.NET Core, utilizando para isto as definições da referência associada a JsonSerializerOptions.Web (uma instância singleton também de JsonSerializerOptions).
O primeiro artigo que publiquei sobre .NET 9 pode ser acessado através do seguinte link:
.NET 9: primeiros testes com o Preview 1 + método CountBy em LINQ
Esta nova capacidade foi demonstrada também em um vídeo recente do Canal .NET no YouTube, em que abordei ainda as melhorias trazidas pelas propriedades IndentCharacter e IndentSize no tipo JsonSerializerOptions:
Tomando como exemplo a classe Localidade:
Serializando instâncias deste tipo em uma Console Application, ao utilizar o método Serialize de JsonSerializer e sem depender de JsonSerializerOptions teremos como prováveis resultados strings como:
{"Id":1,"NomeContinente":"America do Sul","NomePais":"Brasil","NomeCidade":"Sao Paulo"}
{"Id":2,"NomeContinente":"Europa","NomePais":"Italia","NomeCidade":"Roma"}
Observamos aqui o uso do formato Pascal Case (diferentes termos que formam um identificador sempre iniciados por uma letra maiúscula, com os demais caracteres em minúsculo), o padrão adotado na serialização de objetos por JsonSerializer. Já o ASP.NET Core adota o padrão Camel Case como default (com o primeiro caracter do primeiro termo de um identificador em minúsculo, sendo que os demais termos seguem com o uso do primeiro caracter em maiúsculo e o restante em minúsculo), algo facilmente observável ao trabalhar com APIs REST.
Ao empregarmos na serialização JsonSerializerOptions.Web com o método Serialize de JsonSerializer, como indicado na próxima listagem:
O resultado desta implementação utilizará então o padrão camel case:
Esse projeto está disponível no GitHub:
https://github.com/renatogroffe/DotNet9-ConsoleApp-DefaultWebOptions
Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!