Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET Core 3.0 Web API Mimarisinde “A Possible Object Cycle Was Detected Which Is Not Supported” Hatası ve Çözümü

Merhaba,

Asp.NET Core Web API 3.0 mimarisinde endpointlere yapılan istekler neticesinde JSON formatına parse edilip gönderilen veriler eğer ki birbiriyle ilişkisel verilerden ibaretse(ki genellikle bu şekilde ilişkisel veriler Entity Framework Core – Lazy Loading mekanizması ile elde edilir) bu parse işlemi gerçekleştirilemeyecek ve makalemizin başlığınıda oluşturan aşağıdaki hatayı verecektir.
Asp.NET Core 3.0 Web API Mimarisinde A Possible Object Cycle Was Detected Which Is Not Supported Hatası ve Çözümü

Hatayı metinsel olarak da aşağıda ele alalım…

System.Text.Json.JsonException: A possible object cycle was detected which is not supported. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 32.

Bu hata ilişkisel verilerin serialize edilmesinde döngüsel durumun gerçekleştirilememesinden kaynaklanmaktadır. Dolayısıyla bu duruma çözüm olarak .NET Core 3.0’da json politikaları değiştirildi ve serialize becerisi oldukça güçlendirildi. Hatayı çözebilmek için Microsoft.AspNetCore.Mvc.NewtonsoftJson kütüphanesini uygulamanıza eklemeniz ve ardından Startup dosyasında aşağıdaki operasyonu gerçekleştirmeniz gerekmektedir.
Asp.NET Core 3.0 Web API Mimarisinde A Possible Object Cycle Was Detected Which Is Not Supported Hatası ve Çözümü

Yukarıdaki ekran görüntüsünde de görebildiğiniz gibi “AddControllers()” metodunun devamına “AddNewtonsftJson(..)” metodu eklenmekte ve içerisine parametre olarak json operasyonlarına özel gerekli konfigürasyonel işlemleri yaptığımız lambda ifadesi oluşturulmakta ve ilişkisel nesnelerdeki döngüsel durumların işlenmesi görmezden gelinmektedir.

Ve bu şekilde hata ortadan kaldırılmış bulunmaktadır…

İlgilenenlerin ve şifa arayınların faydalanması dileğiyle… 🙂
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

6 Cevaplar

  1. İhsan dedi ki:

    Thanks! You saved my time. 🙂

  2. İbrahim dedi ki:

    Başlık hatalı olmuş, bu bir çözüm değil ki? Sen sadece System.Text.Json yerine eski NewtonsoftJson’u kullan demişsin kısaca. Ama bir “workaround” olarak kabul edilebilir.

  3. Yasin dedi ki:

    Teşekkürler 🙂

  4. memoxtr dedi ki:

    mukemmelsin dostumm

  5. onur dedi ki:

    sen adamsın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir