Novidades do .NET 8: melhorias na serialização com hierarquias de interfaces
Este artigo aborda outra novidade envolvendo serialização no .NET 8: a capacidade de agora também suportar as propriedades que fazem parte de uma hierarquia de interfaces.
Tomando como exemplo a classe Localidade, indicada na listagem seguinte:
- Esse tipo implementa a interface ICidade;
- Já a interface ICidade implementa IPais, com esta última derivando de IContinente;
- Temos aqui uma hierarquia de interfaces (ICidade > IPais > IContinente), a qual foi implementada por meio das 3 propriedades declaradas em Localidade.
E o que aconteceria ao serializarmos em .NET 7 instâncias de Localidade, como as indicadas no trecho de código a seguir:
Empregando neste processo o tipo JsonSerializer (namespace System.Text.Json) e as diferentes interfaces das quais a classe Localidade deriva, conforme exemplificado pelas instruções seguintes?
Ao executar uma Console Application que faz uso desses 2 trechos de código teríamos como retorno:
Fica claro aqui que a hierarquia de interfaces não foi levada em conta durante a serialização, com cada retorno do método Serialize de JsonSerializer considerando apenas as propriedades definidas diretamente na interface especificada como parâmetro.
Na próxima listagem está uma versão mais completa e em .NET 8 deste exemplo que testa a serialização com as interfaces IContinente, IPais e ICidade:
Executando esta Console Application a partir do Visual Studio 2022 constatamos, através do print a seguir, que cada interface informada ao método Serialize de JsonSerializer teve considerados no resultado da serialização sua propriedade e os elementos herdados da hierarquia da qual a mesma faz parte (quando este for o caso):
Esse exemplo foi disponibilizado no GitHub:
https://github.com/renatogroffe/DotNet8-ConsoleApp-Serialization-InterfaceHierarchies
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!