Como resolver: JsonException: A possible object cycle was detected.

Marcio Nizzola
2 min readApr 8, 2023

--

Como resolver: JsonException: A possible object cycle was detected

Quem nunca se deparou com este erro ao devolver uma resposta oriunda do Entity Framework diretamente numa API e tem essa mensagem:

An unhandled exception occurred while processing the request.

JsonException: A possible object cycle was detected. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 32. Consider using ReferenceHandler.Preserve on JsonSerializerOptions to support cycles. …..

System.Text.Json.ThrowHelper.ThrowJsonException_SerializerCycleDetected(int maxDepth).

Sempre que passar por isto, trata-se de um problema simples e de fácil solução, pois ao mapearmos um objeto no Entity Framework, ele possui referências ao objeto “pai” na relação de forma cíclica, onde novamente o “pai” terá o “filho” infinitamente.

Isto se deve ao mapeamento das entidades e normalmente ocorre quando utilizamos o comando “Include” para trazer uma entidade que está associada à outra, como abaixo:

var result = _context.Cliente.Include(a => a.Enderecos).ToList();

Isto me faz lembrar de uma Matrioska (boneca russa que cabe uma dentro da outra quase que infinitamente).

Temos soluções diferentes para cada caso:

Se estiver utilizando ainda Controllers e sua aplicação seja acima de .NET 3, basta colocar isto na inicialização da sua aplicação:

services.AddControllers().AddJsonOptions(x =>
x.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve);

Caso esteja utilizando Minimal Api, insira então o código abaixo na inicialização da aplicação (program.cs).

builder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(options => options.SerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);

Agora caso esteja mapeando ainda utilizando Newtonsoft.Json, a solução seria assim:


services.AddControllers().AddNewtonsoftJson(x =>
x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

Gostou do artigo? clique no ícone👏e me siga para ver as próximas publicações !!

--

--

Marcio Nizzola
Marcio Nizzola

Written by Marcio Nizzola

Microsoft MVP | Software Architect na CI&T | Prof. da Etec Itu | Membro Fundador da Comunidade Itu Developers.

No responses yet