Novidades do .NET 9: serialização utilizando JsonSerializerOptions.Web (no padrão do ASP.NET Core)

Renato Groffe
2 min readFeb 24, 2024

--

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:

Clique nesta imagem para visualizar com uma melhor resolução

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!

--

--

Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker