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.