C# ASP.NET MVC Entity 模型数据转换中遇到的问题

最近开发项目遇到ASP.NET MVC + Entity EasyUI 架构的后台, 需要将MODEL实体模型数据绑定到EasyUI 前台, 实体模型采用Entity 返回, 然后通过Newtonsoft.Json 将实体转换成json字符串返回。但是在转化的过程中却遇到实体模型因为外键引用出现转换过程死循环的问题.
错误提示:Newtonsoft.Json.JsonSerializationException:“Self referencing loop detected with type 'System.Data.Entity.DynamicProxies.Labels

在这里插入图片描述
提示的意思就是发生循环引用导致转换异常。

解决的方法有两种:

第一种,如果我们本次Entity操作, 对外键表可以忽略,可以在DBContext 设置延迟加载忽略引用

        DbContext dbContext = CallContext.GetData("DbContext") as DbContext;

        if (dbContext== null)
        {
            dbContext = new GuaZhouGovDbEntities();

            CallContext.SetData("DbContext", dbContext);
        }

        dbContext.Configuration.LazyLoadingEnabled = false; //liuwei 依赖虚拟属性防止Json转化陷入死循环 2020-03-05

        return dbContext;

然后此时返回的实体, 外键实体模型是 null 类型, 所以能彻底解决这个问题。

第二种, 如果我们需要外键属性表,参与主键表的数据查询,可以这样做,在Json转化的时候

       JsonSerializerSettings settings = new JsonSerializerSettings();

       settings.Converters.Add(new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });、
       
       settings.Formatting = Newtonsoft.Json.Formatting.Indented;
       
       settings.MaxDepth = 5;  //liuwei 外键最大检索深度设置5 或者更低,取决于你的主外键关系
       
       settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;  //liuwei  忽略循环引用
       
        return JsonConvert.SerializeObject(t, settings);

这样我们的Entity 主外键表信息可以完整保留,并成功转换成Json 模式,然后EasyUI 就可以成功绑定.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值