Исключение циклической ссылки с сериализацией JSON с MVC3 и EF4 CTP5w

У меня возникают проблемы с циклической ссылкой, когда я пытаюсь сериализовать объект, возвращенный через EF4 CTP5. Я использую подход «сначала код» и простые poco для моей модели.

Я добавил атрибуты [ScriptIgnore] к любым свойствам, которые обеспечивают обратные ссылки на объект, и, к сожалению, все работает нормально, если я вручную создаю экземпляр poco, т.е. они сериализовать в JSON нормально, и атрибут scriptignore подтвержден. Однако, когда я пытаюсь сериализовать объект, возвращенный из DAL, я получаю исключение циклической ссылки «При сериализации объекта типа 'System.Data.Entity.DynamicProxies.xxxx' была обнаружена циклическая ссылка»

Я пробовал несколько способов получения данных, но все они застревают с этой ошибкой:

    public JsonResult GetTimeSlot(int id) {
        TimeSlotDao tsDao = new TimeSlotDao();
        TimeSlot ts = tsDao.GetById(id);
        return Json(ts);
    }

Метод ниже работает немного лучше, чем динамический проксируемый объект временного интервала, вызывающий циклическую ссылку на объект встречи.

    public JsonResult GetTimeSlot(int id) {
        TimeSlotDao tsDao = new TimeSlotDao();
            var ts = from t in tsDao.GetQueryable()
                 where t.Id == id
                 select new {t.Id, t.StartTime, t.Available, t.Appointment};
        return Json(ts);
    }

Есть идеи или решения этой проблемы?

Обновление

    public JsonResult GetTimeSlot(int id) {
        TimeSlotDao tsDao = new TimeSlotDao();
        TimeSlot ts = tsDao.GetById(id);
        return Json(ts);
    }

Приведенный ниже метод работает немного лучше, чем динамический проксируемый объект временного интервала, вызывающий циклическую ссылку на объект назначения.

    public JsonResult GetTimeSlot(int id) {
        TimeSlotDao tsDao = new TimeSlotDao();
            var ts = from t in tsDao.GetQueryable()
                 where t.Id == id
                 select new {t.Id, t.StartTime, t.Available, t.Appointment};
        return Json(ts);
    }

Есть идеи или решения этой проблемы?

Обновление

    public JsonResult GetTimeSlot(int id) {
        TimeSlotDao tsDao = new TimeSlotDao();
        TimeSlot ts = tsDao.GetById(id);
        return Json(ts);
    }

Приведенный ниже метод работает немного лучше, чем динамический проксируемый объект временного интервала, вызывающий циклическую ссылку на объект назначения.

    public JsonResult GetTimeSlot(int id) {
        TimeSlotDao tsDao = new TimeSlotDao();
            var ts = from t in tsDao.GetQueryable()
                 where t.Id == id
                 select new {t.Id, t.StartTime, t.Available, t.Appointment};
        return Json(ts);
    }

Есть идеи или решения этой проблемы?

Обновление Я бы предпочел использовать сериализатор из коробки, если это возможно, хотя в качестве альтернативы можно использовать Json.Net через nuget, я надеюсь, что его можно будет использовать так, как я планировал ...

13
задан nakchak 5 January 2011 в 22:32
поделиться