При сериализации объекта MVC C # обнаружена циклическая ссылка

У меня есть следующий метод:

public JsonResult List() {
   object jsonResult = new {
        productList = productDao.findAllProducts(),
        categoryList = categoryDao.findAllCategories()
    };

    return Json(jsonResult, JsonRequestBehavior.AllowGet);
}

в C # MVC, и когда я пытаюсь сериализовать список продуктов, возникает следующая ошибка:

Циклическая ссылка была обнаружена при сериализации объект типа 'System.Data.Entity.DynamicProxies.product_44663398E72098C15707A5F4D8F5C4AEF9F482061AC8B50053C2FADC993417D4'.

Что я делаю не так?

0
задан 28.06.2016, 21:40
3 ответа

Круговая ссылка, - когда у твоего объекта есть свойства, которых одна из них ссылается на другой объект с собственностью, равной предыдущей; например:

public class Padre{

   public string Nombre {get; set;}
   public string Edad {get; set;}
   public string Hijo {get; set;}
}


public class Hijo{
   public string Nombre {get; set;}
   public string Edad {get; set;}
   public string Padre {get; set;}
}

В предыдущем примере у Отца есть в сын и у его сына в свою очередь есть отец, но как у отца есть собственность, сын начинает делать круговую ссылку, называясь снова и снова вызывая бесконечный loop.

Проверяет, что у твоих объектов не было свойств этого типа.

1
ответ дан 24.11.2019, 13:58
  • 1
    Если у них есть свойства этого типа – Andres Guillermo Castellanos A 28.06.2016, 21:53
  • 2
    #191; Ты используешь entity framework или немного из-за стиля, чтобы извлекать элементы? – AngelRuizC 28.06.2016, 21:54
  • 3
    это производит в связь, которая у него есть product и category, который нуждался в том, чтобы перейти с одного сайта на другой в категории, ассоциируемой с продуктом пример: product.category.category_name – Andres Guillermo Castellanos A 28.06.2016, 21:54
  • 4
    я использую entity framemework ADO.Net – Andres Guillermo Castellanos A 28.06.2016, 21:55
  • 5
    уже я это реализовал, но он возвращает мне объект категорию внутри product, чтобы реализовывать следующий navegaci и # 243; n: product.category.category_name – Andres Guillermo Castellanos A 28.06.2016, 22:00

Объяснение Анхеля Руиса правильно, рекомендация здесь (если ты не хочешь подраться с Энтити Фрамеворк) создавать DTOs (Дата Трансфер Обхектс), у этих есть то же определение, что и твои организации, но у них есть преимущество в том, чтобы быть объектами МАЛО (Plain OLD CLR Objects), у которого нет связи с EntityFramework, создав НЕМНОГИЕ, он оставляет снаружи свойства с круговыми ссылками и ты сможешь serializar правильно.

public class PadreDTO
{
  public string Nombre {get; set;}
  public string Edad {get; set;}
  public string Hijo {get; set;}
}


public class HijoDTO
{
  public string Nombre {get; set;}
  public string Edad {get; set;}
  //public string Padre {get; set;}
}
0
ответ дан 24.11.2019, 13:58
  • 1
    я не функционирую removiento виртуально, и в случае dto я нуждаюсь он состоит в том, чтобы переходить с одного сайта на другой следующей формы: product.category.category_name – Andres Guillermo Castellanos A 28.06.2016, 22:09

У него была эта ошибка и я решил их с этим:

var list = from I in obj.Impuestoes
                       select new
                       {
                           I.Id_Impuesto,
                           I.Nombre,
                           I.Porciento,
                           I.Tipo
                       };
-1
ответ дан 24.11.2019, 13:58