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

标签 c# asp.net entity-framework-4 asp.net-mvc-3 entity-framework-ctp5

当我尝试序列化通过 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/

相关文章:

c# - 应用程序从 EF4 迁移到 Dapper.net

c# - 使用 CommandLine Parser Library 标记所需集

c# - 如何在 Visual C# 中优化代码?

asp.net - 如何在 Javascript 中创建常量文件?

javascript - 使用本地脚本文件时出现 blockUI javascript 错误

asp.net - 使用 Yeoman aspnet 生成器

c# - 如何防止根据条件执行 Controller 操作?

c# - 将 BigInteger 二进制转换为 BigInteger 数字?

c# - 自定义控件 Entity Framework 绑定(bind)

c# - Linq OrderBy Count In 链表