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

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.
Asp.NET MVC - Türündeki Nesne Seri Hale Getirilirken Döngüsel Başvuru Algılandı

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…

Bunlar da hoşunuza gidebilir...

7 Cevaplar

  1. nuknettin dedi ki:

    peki bir IENumerable yada list tipinde nasıl dönülş yaparız bu tekil sonuç için olmuş

    • Gençay dedi ki:

      Merhaba Nuknettin.
      Cevap olarak Northwind veritabanından bir örnek veriyorum;

              [HttpPost]
              public JsonResult PersonelGetir()
              {
                  NorthwindEntities VeriTabani = new NorthwindEntities();
                  var personeller = VeriTabani.Personeller.ToList();
                  personeller.ForEach(x =>
                  {
                      x.Satislar.Clear();
                      x.Bolgeler.Clear();
                  });
                  return Json(personeller, JsonRequestBehavior.AllowGet);
              }
      

      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…

  2. Kaan dedi ki:

    Clear() diye özel bir fonksiyon mu var?

  3. borahan dedi ki:

    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

Bir cevap yazın

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

*