1
resposta

Erro 'Self Referencing Loop' ao utilizar o método GET para Cinemas e Filmes (possível correção)

Acabei, durante as aulas, me deparando com o seguinte erro 'Self Referencing Loop' Gostaria de saber dos instrutores se essa seria a melhor abordagem pois ela corrige o problema, mas não sei se seria o correto. Caso seja, vou deixar a dica para os demais alunos.

Tanto para cinema Erro 'Self Referencing Loop' - CinemaQuanto para filme: Erro 'Self Referencing Loop' - Filme

Pesquisando, vi que uma alternativa possível para correção do problema foi utilizar, na classe 'Program.cs' a seguinte configuração:

No serviço que adiciona a utilização do NewtonsoftJson, acrescente o seguinte código:

(options =>
      options.SerializerSettings.ReferenceLoopHandling =
        Newtonsoft.Json.ReferenceLoopHandling.Ignore)

Ficando dessa forma: Correção

builder.Services.AddControllers().AddNewtonsoftJson(options => 
                    options.SerializerSettings.ReferenceLoopHandling = 
                                Newtonsoft.Json.ReferenceLoopHandling.Ignore);

Segue GET após atualizar o código: Após a correção

1 resposta

Olá Vinicius!

O erro 'Self Referencing Loop' ocorre quando há uma referência circular entre as entidades no seu código. Essa referência circular pode acontecer quando uma entidade faz referência a outra e essa outra também faz referência de volta à primeira entidade.

No seu caso, o erro está ocorrendo ao utilizar o método GET para obter informações de Cinemas e Filmes. A solução que você encontrou, adicionando a configuração options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore no serviço que utiliza o NewtonsoftJson, é uma alternativa válida para corrigir o problema.

Essa configuração faz com que o NewtonsoftJson ignore a referência circular entre as entidades ao serializar os objetos para JSON. Dessa forma, o erro 'Self Referencing Loop' não será mais exibido.

No entanto, é importante ressaltar que essa solução pode não ser a mais adequada em todos os casos. Dependendo da sua aplicação, pode ser necessário tratar a referência circular de forma diferente, como por exemplo, utilizando DTOs (Data Transfer Objects) para retornar apenas as informações necessárias e evitar a referência circular.

Em resumo, a solução que você encontrou é uma alternativa válida para corrigir o erro 'Self Referencing Loop', mas é importante avaliar se essa é a melhor abordagem para o seu caso específico.

Espero ter ajudado e bons estudos!