关于报错Self referencing loop detected with type的原因以及解决办法

25 篇文章 1 订阅
10 篇文章 0 订阅

这种错误是由于使用EF创建实体模型,并且模型间有关系并且添加了相应的导航属性,所以使用Json.Net(包括mvc自带的return Json()方法)转换类的实例的时候 把导航属性也算进去了(A是B的导航属性,B也是A的导航属性,所以会无限循环,导致Json会生成无数层),

解决办法是不要使用return Json()方法  使用Json.Net并且手动禁止Json对导航属性的转换:在实体模型类中添加using Newtonsoft.Json; 引用,在导航属性前加上特性标签 [JsonIgnore]   Json.net就会忽略导航属性,由于模型类可能会经常重新生成,所以最好在模板文件(TT文件中修改以下内容)

 public string UsingDirectives(bool inHeader, bool includeCollections = true)
    {
        return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
            ? string.Format(
                CultureInfo.InvariantCulture,
                "{0}using System;\r\nusing Newtonsoft.Json;{1}" +//添加引用命名空间
                "{2}",
                inHeader ? Environment.NewLine : "",
                includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
                inHeader ? "" : Environment.NewLine)
            : "";
    }

 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
 [JsonIgnore]//添加特性标签
 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值