Asp.NET MVC – <T> Türündeki Nesne Seri Hale Getirilirken Döngüsel Başvuru Algılandı
Bir önceki Asp.NET MVC – JsonResult İle Veri Dönerken RecursionLimit Aşıldı(RecursionLimit Exceeded) Hatası başlıklı yazımda RecursionLimit hatası üzerine yoğunlaşmıştık.Bu yazımızın içeriği ise benzer bir durum olan ” Türündeki Nesne Seri Hale Getirilirken Döngüsel Başvuru Algılandı” hatası üzerinedir.
Önceki yazımıza göz atarsanız eğer, veritabanı olarak gene “Okul” veritabanını baz alacağız.(Önceki yazıda oluşturduğumuz veritabanı ve ilişkileri aynen bu yazıda da örneklendirme amaçlı kullanacağız!)
Türündeki Nesne Seri Hale Getirilirken Döngüsel Başvuru Algılandı hatası, bir Post sonucunda Json olarak geriye döndürülmek istenen modelin ilişkisel bir yapıda olmasından kaynaklanmaktadır.
Örnek olarak aşağıdaki kod bloğunu inceleyiniz.
[HttpPost] public JsonResult Post(int id) { VeriTabaniDataContext Veri = new VeriTabaniDataContext(); Siniflar Sinif = Veri.Siniflars.FirstOrDefault(s => s.ID == id); return Json(Sinif, JsonRequestBehavior.AllowGet); }
Yukarıdaki “Post” isimli Action metodumuzun tetiklendiğini varsayarsak eğer işlem neticesinde aşağıda ekran görüntüsündeki hatayla karşılaşmaktayız.
Bu hatanın sebebi, yukarıda belirtmiş olduğum yazımızdaki sorunla aynı temeli teşkil etmektedir.Çözüm olarakta aynı tekniği kullanacağız.
[HttpPost] public JsonResult Post(int id) { VeriTabaniDataContext Veri = new VeriTabaniDataContext(); Siniflar Sinif = Veri.Siniflars.FirstOrDefault(s => s.ID == id); var JsonModel = new { SinifAdi = Sinif.SinifAdi, ID = Sinif.ID, Ogrenciler = from o in Sinif.Ogrencilers select new { Adi = o.Adi, SoyAdi = o.SoyAdi, ID = o.ID } }; return Json(JsonModel, JsonRequestBehavior.AllowGet); }
Bir önceki makalemde belirttiğim gibi burada da aynı işlemleri gerçekleştiriyoruz.
Yani anlayacağınız,
RecursionLimit hatası ile, ” Türündeki Nesne Seri Hale Getirilirken Döngüsel Başvuru Algılandı” hatası aynı teknikle çözülebilmektedir.
Bu yazının içeriğini daha net anlayabilmeniz için yukarıda belirtmiş olduğum adresteki yazımı okumanız gerekmektedir.Ek olarak her an karşılaşabileceğiniz olası bir RecursionLimit hatası hakkında da bilgi edinmiş olacaksınız.
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar diliyorum…
peki bir IENumerable yada list tipinde nasıl dönülş yaparız bu tekil sonuç için olmuş
Merhaba Nuknettin.
Cevap olarak Northwind veritabanından bir örnek veriyorum;
Dikkat edersen eğer elimizdeki koleksiyondan bu problemi arındırabilmek için ilişkisel olan tüm kolonları Clear metodu ile boşaltmaktayım.
Bu şekilde hatayı ortadan kaldırabilirsin.
İyi çalışmalar…
Clear() diye özel bir fonksiyon mu var?
Koleksiyon yapılarında Clear metodu vardır. Bu fonksiyon sayesinde koleksiyon içerisindeki elemanları temizleyebilirsiniz.
Merhaba,
Bloğunuzu sürekli takip ediyorum. Dediğiniz hata türüyle ilgili sadece siz yazmışsınız sanırım internette. Dediklerinizi yapmama rağmen bende düzelmedi hata almaya devam ediyorum. Önerdiğiniz başka bir yol var mı ?
Ekran görüntüsü aşağıdaki linkte
https://i.hizliresim.com/o6VE0m.png
Askerdeymişsiniz. Neyse hayırlı teskereler dileyim ben size. Siz gelene kadar inşallah soruna cevap bulurum 🙂
Ha gayret 🙂
Gelene kadar bul bakalım neymiş sorun banada bildir 🙂
Sevgiler…