gpt4 book ai didi

c# - 使用 MVC3 和 EF4 CTP5w 进行 JSON 序列化的循环引用异常

转载 作者:可可西里 更新时间:2023-11-01 08:11:06 28 4
gpt4 key购买 nike

当我尝试序列化通过 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 可以作为替代方案,但我希望它也可以按照我的意图使用它......

最佳答案

我在 IIS 托管的 WCF 服务和尝试使用 DataContractJsonSerializer 类序列化 POCO 对象时遇到了类似的问题。内置的 JSON 序列化程序似乎根本无法处理循环引用。我能够通过使用 JSON.net 自己处理序列化来绕过它序列化器,并且只是从我的方法中返回 json 字符串。 JSON.net 序列化器有一个选项可以忽略循环引用,因为 json 本身不支持它们。

关于c# - 使用 MVC3 和 EF4 CTP5w 进行 JSON 序列化的循环引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4606232/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com