当我尝试序列化通过 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);
}
这个问题的任何想法或解决方案?
更新 如果可能的话,我宁愿使用开箱即用的序列化程序,尽管通过 nuget 的 Json.Net 可以作为替代方案,但我希望它也可以按照我的意图使用它......