首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >序列化linq时需要帮助进行自我引用循环

问序列化linq时需要帮助进行自我引用循环
EN

Stack Overflow用户
提问于 2021-03-31 09:31:30
回答 1查看 16关注 0票数 0

我知道以前有人问过这个问题,但我找不到任何解决我的问题的方法。我正在开发一个带有10多个控制器的WebAPI,它们的方法访问服务器数据库。我使用Linq2SQL编写查询,并使用Json序列化返回,将其发送回我的应用程序。问题是,无论查询有多简单,它都会在序列化时返回自引用循环,这在所有控制器方法中都会发生。请看下面的一个示例:

var retitems = dtcxapi.ListItems.AsQueryable() .Where(i => i.IsActive == true && i.ListName.ToLower() == listName.ToLower()).ToList();其中dtcxapi是我的DataContext,ListItems是我的表。序列化时,它显示:使用类型'BV.IMSWEBAPI.User‘检测到自引用循环。路径“.User1.Users1”。

但正如我所说的,对于任何控制器方法中的任何查询,都会发生这个错误。我已经尝试在mWeb配置中使用ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore,但没有修复。

任何帮助都将不胜感激。谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-06-27 07:20:04

解决此问题的唯一真正方法是不返回Linq对象,而是返回一个未绑定到数据库的DTO/Model。如果要返回数据库对象,则由于导航属性的原因,您将始终遇到自引用循环。

您没有提到您是否使用.NET核心或.NET框架,但如果它是核心,它将根本不使用web.config,相反,您应该修改您的启动方法:

代码语言:javascript
复制
services.AddControllers().AddNewtonsoftJson(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

但同样,这是一个创可贴,正确的解决方案是使用DTO

更多信息:https://dotnetcoretutorials.com/2020/03/15/fixing-json-self-referencing-loop-exceptions/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66880466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档