Novidades do .NET 6: geração de JSON com Writeable DOM APIs
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: