Trabalhando com Json e .NET Core 3.0 — Parte 1

Rodolfo Fadino Jr
Rodolfo Fadino
Published in
3 min readOct 20, 2019

--

Uma das novidades do .NET Core 3.0 é o suporte nativo a JSON, trazendo um ferramental otimizado para trabalhar com JSONs e que faz muita diferença em alguns cenários em termos de alocação de memória e consumo de recursos, chegando a possibilitar até 2x mais requisições em nossas API`s (em uma comparação com o Json.NET).

Pensando que JSON é um dos formatos mais utilizados atualmente em comunicações entre nossos sistemas, aplicativos e devices. Quis abordar um pouco esta nova biblioteca e como podemos explorar suas features e benefícios.

Como podemos começar?

Vou criar um Console com .NET Core 3.0 e nele vou usar duas namespaces:

Além disso criarei duas classes para utilizarmos: Order e Product

Serializando um objeto

Para serializar um objeto em string podemos utilizar o JsonSerializer.Serialize:

O que irá produzir uma string mais ou menos assim:

Notem que as minhas variáveis ficaram com Pascal Case, como padrão eu prefiro manter elas em Camel Case. Para configurar isto é possível passar um parâmetro para o nosso serializador com várias configurações, uma delas é a Policy de convenção de nome:

Que irá produzir a string final da seguinte maneira:

Outra opção que temos neste sentido é criar a nossa própria implementação para a Policy de tipos, no exemplo abaixo crio uma classe que herda de JsonNamingPolicy e implementa o padrão Snake Case (ex: NomeDoAluno => nome_do_aluno):

Tendo a nova classe criada, podemos configurar a serialização utilizando ela, notem como ficou a propriedade DataCreated => data_created:

Além destas opções é possível configurar outras como indentação do JSON, se o serializador deverá ignorar valores nulos, quantos níveis entre os objetos ele irá navegar e opções que possibilitam ele ignorar propriedades ready only:

Deserializando

A deserialização também ocorre de maneira parecida, nela também podemos utilizar as opções que temos no JsonSerializeOptions (no exemplo abaixo utilizei o SnakeCasePropertyNamingPolicy que criei)

Outra opção útil é chamada de AllowTrailingCommas, que permite deserializar com sucesso um JSON que possua um objeto que termine com uma vírgula no final da última propriedade, por exemplo:

Deserializando o JSON acima com a opção AllowTrailingCommas=true nós conseguiremos ter sucesso:

Porem por padrão esta opção é configurada como false, notem como fica a deserialização do mesmo objeto com a opção como false:

Posso migrar 100% minhas aplicações?

Sem dúvida na maioria dos cenários teremos sucesso no uso, porém, ainda existem alguns cenários que precisaremos optar por outra biblioteca (como por exemplo o Json.Net). Minha sugestão é sempre que possível avalie e teste, temos alguns restrições em propriedades (sem o get e o set) e em tuplas que não funcionam muito bem ainda. Mesmo com estas limitações, o ganho de performance vale muito o teste.

E minha API?

No .NET Core 3.0 por padrão nossos projetos web já utilizam o System.Text.Json. No próximo post vou abordar um de uma maneira detalhada de como e quando optar por utilizar o Json.NET ou a nova biblioteca em nossos projetos de API`s e Web Sites.

Os exemplos estão disponíveis em meu github: https://github.com/rodolfofadino/example_post_1_system_text_json

Espero que este post seja útil, estou a disposição para dúvida, críticas e sugestões 😀

abs

Rodolfo

--

--