Novidades do .NET 6: geração de JSON com Writeable DOM APIs

Renato Groffe
3 min readJul 11, 2021

--

Os Previews 4 e 5 do .NET 6 trouxeram inúmeras novidades, sendo que publiquei diversos conteúdos sobre essas melhorias aqui neste blog:

Novidades do .NET 6: melhorias em LINQ — Chunk e Zip

Novidades do .NET 6: Compile-time logging source generation em ASP.NET Core

Novidades do .NET 6: melhorias em LINQ — ExceptBy e DistinctBy

Novidades do .NET 6: suporte a Hot Reload no Visual Studio 2019

Novidades do .NET 6: melhorias em LINQ — FirstOrDefault, LastOrDefault e SingleOrDefault

Novidades do .NET 6: DateOnly e TimeOnly structs

Novidades do .NET 6: melhorias em LINQ — UnionBy e IntersectBy

Novidades do .NET 6: HTTP Logging no ASP.NET Core

Novidades do .NET 6: melhorias em LINQ — MaxBy e MinBy

Novidades do .NET 6: Minimal APIs em ASP.NET Core

Além de demonstrá-las em exemplos práticos em uma live recente no Canal .NET:

Neste novo artigo dou continuidade a este esforço, abordando uma novidade anunciada com o Preview 4 do .NET 6: a possibilidade de gerar dados em JSON fazendo uso para isto de um conjunto de recursos batizado como Writeable DOM APIs.

Estas novas funcionalidades envolvem classes definidas no namespace System.Text.Json.Node: JsonNode, JsonObject, JsonArray e JsonValue. Esses novos tipos facilitam, por sua vez, a leitura e a escrita de JSON em uma estrutura de objetos organizada como uma árvore, algo bastante similar ao conceito de DOM (Domain Object Model) de HTML.

O exemplo apresentado a seguir já foi disponibilizado no GitHub:

https://github.com/renatogroffe/DotNet6_Preview5-WriteableJsonDOM

Na listagem a seguir temos exemplos de uso dos tipos JsonNode, JsonObject e JsonArray:

  • O tipo JsonNode disponibiliza o método Parse, que permite converter uma string JSON em um agrupamento de objetos (linha 13);
  • Com a classe JsonObject podemos gerar novos objetos com níveis e subníveis (a partir da linha 20), utilizando ainda outros tipos como JsonArray;
  • Através do uso de colchetes ([]) podemos acessar os vários níveis de um objeto baseado nestes novos tipos;
  • O método genérico GetValue permite também conversões de valores JSON (linhas 15 e 43);
  • Com o método ToJsonString podemos converter um objeto para uma string JSON, havendo inclusive a possibilidade de configurar a serialização por meio de uma instância de JsonSerializerOptions (linhas 34 e 37).

Na imagem seguinte temos o resultado da execução desta aplicação de testes:

E para concluir deixo aqui um convite…

Dia 14/07 (quarta) às 21:00 horário de Brasília — teremos mais um evento online e gratuito no canal Canal .NET.

Desta vez uma live sobre o Portainer, uma ferramenta gratuita e que conta uma interface gráfica para a manipulação de containers de forma descomplicada e com uma maior produtividade. Além de Docker, o Portainer oferece suporte também a tecnologias como Kubernetes, Docker Swarm e Azure Container Instances.

Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:

https://bit.ly/live-portainer

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

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

No responses yet