Novidades do .NET 8: melhorias na serialização com hierarquias de interfaces

Renato Groffe
2 min readOct 31, 2023

--

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:

Clique nesta imagem para visualizar com uma melhor resolução

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):

Clique nesta imagem para visualizar com uma melhor resolução

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!

--

--

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