0
respostas

Soluções alternativas para o problema de ciclos

Usando o Atributo JsonIgnote

Acredito ser uma solução ruim para o problema de ciclos, por limitar as respostas de alguns controladores. Por exemplo: Se tivermos esses modelos com a relação de n:n

public class Cinema
{
        public string Nome;
        public List<Filmes> Filmes;
}
public class Filme
{
        public string Titulo;
        [JsonIgnore]
        public List<Cinema> Cinemas;
}

Não haverá problema de ciclos durante a desserialização. Porém o retorno do Filme nunca trará os cinemas onde o filme está sendo exibido.

Criando um Modelo

Uma solução obvia seria criarmos um novo modelo semelhante porém sem as propriedades de navegação.

public class Filme
{
        public string Titulo;
        public List<CinemaCustom> Cinemas;
}
public class CinemaCustom
{
        public string Nome;
}

Configurando o ReferenceHandler

Como ultima solução que encontrei, também podemos configurar as opções de desserialização para que as referencias repetidas sejam ignoradas, usando o ReferenceHandler.IgnoreCycles.

builder.Services.AddControllers()
    .AddJsonOptions(c => c.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);

Outra opção seria usar o ReferenceHandler.Preserve.