Не могу сериализовать объект - PullRequest
0 голосов
/ 19 октября 2011

Я определил модель, подобную этой

public class Planilla
{
    [Key]
    public int IDPlanilla { get; set; }

    [Required(ErrorMessage = "*")]
    [Display(Name = "Dirección de Negocio")]
    public int IDDireccionDeNegocio { get; set; }

    [Required (ErrorMessage = "*")]
    public string Nombre { get; set; }
    [Display(Name = "Descripción")]
    public string Descripcion { get; set; }

    public bool Activo { get; set; }

    [ScriptIgnore]
    public virtual DireccionDeNegocio DireccionDeNegocio { get; set; }
}

И у меня в контроллере есть метод, который возвращает первый элемент этой модели

    [HttpPost]
    public ActionResult GetElements(string IDCampana)
    {
        Planilla query = db.Planillas.First();
        return Json(query);                 
    }

Моя проблема в том, когда я вызываю этуметод на стороне клиента выдает ошибку, в которой говорится, что

циклическая ссылка обнаружена при попытке сериализации System.Data.Entity.DynamicProxies.Planilla_7F7D4D6D9AD7AEDCC59865F32D5D02B4023989FC7178D7698895D2CA59F26.Dic * 1010.Planilla_7F7D4D6D9AD7AEDCC59865F32D5D02B4023989FC7178D7698895D2CA59F26FEE} instead a Model of my namespace like Example.Models.DireccionDeNegocio`.

Почему я поступаю неправильно?Потому что я пытался с другими моделями, и работа хорошо

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Используйте модели представлений, это единственный совет, который я могу вам дать. Никогда не передавайте модели доменов своим взглядам. Это так просто. И если вы соблюдаете это простое и фундаментальное правило в приложениях ASP.NET MVC, у вас никогда не возникнет проблем. Например, если вам нужен только идентификатор и описание в вашем представлении:

[HttpPost]
public ActionResult GetElements(string IDCampana)
{
    Planilla query = db.Planillas.First();
    return Json(new 
    { 
        Id = query.IDPlanilla, 
        Description = query.Description 
    });
}

Обратите внимание, что в этом случае анонимный объект служит моделью представления. Но если вы действительно хотите сделать что-то правильно, напишите модель представления:

public class PlanillaViewModel
{
    public int Id { get; set; }
    public string Description { get; set; }
}

и затем:

[HttpPost]
public ActionResult GetElements(string IDCampana)
{
    Planilla query = db.Planillas.First();
    return Json(new PlanillaViewModel 
    { 
        Id = query.IDPlanilla, 
        Description = query.Description 
    });
}

Кстати, Айенде написала хорошую серию постов в блоге об этом.

1 голос
/ 19 октября 2011

System.Data.Entity.DynamicProxies.* - пространство имен прокси Entity Framework. Ваш DbContext создает ваши сущности как таковые для поддержки отложенной загрузки и отслеживания изменений. Это не твоя проблема. Проблема, скорее всего, заключается в круговой ассоциации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...