.NET 8: primeiros testes com o Preview 1 + melhorias na desserialização JSON
A Microsoft disponibilizou no final de Fevereiro/2023 - terça, 21/02 - o Preview 1 do .NET 8, o primeiro release para avaliação desta nova versão (com lançamento previsto até o momento para Novembro/2023). Informações sobre algumas das novas funcionalidades e recursos podem ser encontradas no blog oficial da plataforma .NET:
Assim como vem acontecendo em outras versões do .NET, o .NET 8 contará com inúmeras melhorias envolvendo aspectos como performance, containerização e novas funcionalidades em tipos pré-existentes.
Inclusive já instalei esta nova versão em um ambiente Windows que utilizo para testes:
A instalação do .NET 8 Preview 1 pode ser obtida em:
https://dotnet.microsoft.com/en-us/download/dotnet/8.0
Buscando evitar indesejáveis efeitos colaterais que possam ser ocasionados por este release, deixo aqui uma dica… Como sempre costumo fazer nos primeiros Previews de uma futura versão do .NET (.NET 5, .NET 6, .NET 7…), recomendo configurar qual release deverá ser assumido como default. No artigo a seguir mostro como é fácil realizar tal configuração, valendo-se para isto do arquivo global.json:
.NET Core: definindo a versão do SDK utilizada pelo comando dotnet new
Nas próximas seções abordo o suporte oferecido pelo Visual Studio 2022 ao .NET 8 Preview 1, bem como novidades na desserialização JSON trazidas por este release.
Suporte no Visual Studio 2022
Ao utilizarmos o Visual Studio 2022 versão 17.5.0 Preview 1.0 o Preview 1 do .NET 8 aparecerá como uma das alternativas disponíveis:
Melhorias na desserialização JSON
O .NET 8 também traz uma melhoria voltada à desserialização de strings JSON em objetos: trata-se da possibilidade de geração de erros durante este processo, caso um elemento presente na sequência de texto não exista no tipo que corresponde ao resultado desserializado.
Uma das formas de implementar tal prática envolve o uso do atributo JsonUnmappedMemberHandling (o tipo JsonUnmappedMemberHandlingAttribute encontra-se no namespace System.Text.Json.Serialization). Além de Disallow aplicado no exemplo a seguir com a classe Pessoa (e que resultará em uma exceção, caso um membro não esteja definido no tipo que representa o valor desserializado), temos como opção também o valor Skip (comportamento até então padrão, em que a desserialização ocorre mesmo com um membro ausente no tipo de destino):
Já a próxima listagem traz um exemplo de utilização da classe Pessoa:
- Uma primeira string conta com o elemento Peso, que não foi declarado em Pessoa. Ao associar o valor Disallow ao atributo JsonUnmappedMemberHandling esperamos que se lance uma exceção para esse texto;
- Uma segunda string, em que os 2 elementos presentes foram definidos no tipo Pessoa.
Ao executar a aplicação correspondente teremos então o lançamento de uma exceção desserializando a primeira string, assim como a ocorrência normal deste processo com o segundo valor:
Este exemplo também foi disponibilizado no GitHub:
https://github.com/renatogroffe/DotNet8-ConsoleApp-JsonUnmappedMemberHandlingAttribute
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!