Self referencing loop detected for property 'funnyimginfo' with type 'System(Json序列化循环引用问题)

本文详细解析了自引用循环在Json序列化中引发的错误,并提供了三种解决方案,包括自定义数据类、修改WebApiConfig设置及使用JsonIgnore注解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

        这个问题我也是第一次遇到,刚开始的时候也是很懵,出来一堆不知道啥意思的错误,后来通过百度才知道,原来是自引用循环。我的代码里的错误意思就是自引用循环检测属性'funnyimginfo'与类型'System。知道这个错误我就感觉我知道从哪个方面入手了。感觉是导航属性的问题。一测试果然还真是。下面给大家分析下原因。


错误原因:

我的funnyimginfo实体和另两个实体的有主外键关联,然而在我对查询信息进行Json序列化的时候,就报错了。原因就是在进行Json进行转换的时候,把模型间的导航属性也算进去了。(实体之间主外键关联的较多,对象之间互相深度循环,导致Json序列化失败)。


解决办法:

网上说的解决办法有几种,但是我试试了都没实现。下面我给大家先介绍下我自己的解决办法。

先说下思路:

就是自己写一个类,类里的字段的值都是你需要返回给客户端的数据,然后用一个集合保存你从数据库拿到数据,然后创建一个Funny对象,把你需要的数据赋值给Funny类,最后在进行Json序列化。这样就不会因为导航属性出现这个错误了。

展示截图:

以上就是我的方法。

下面给大家介绍下网上的,不过我都没实现。不过大家如果用我的方法行不通时,大家可以试试网上的。

第一种:把实体之间的关联去掉(这种不建议采用,实体之间本来就是有关系的,不关联我们怎样操作呢,虽然也有方法,但是               麻烦。)

第二种:全局删除循环引用 webapiconfig中修改如下(这个我试了,没实现效果)

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

第三种:在导航属性上加注解[JsonIgnore]忽略此属性  EF采用database first的话可能不适用。


这个问题到此结束。嘿嘿!


结尾:

       分享:任何的限制,都是从自己的内心开始的。忘掉失败,不过要牢记失败中的教训!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值