在 API 控制器中检测到 JSON.Net 自引用循环
Posted
技术标签:
【中文标题】在 API 控制器中检测到 JSON.Net 自引用循环【英文标题】:JSON.Net Self referencing loop detected in API Controller 【发布时间】:2016-09-15 04:39:29 【问题描述】:环境:
.net 4.6 1.0.0-rc1-update2 Entity Framework 核心 rc final。我的 API 控制器抛出了这个异常:
应用程序引发了未处理的异常。 Newtonsoft.Json.JsonSerializationException:为“Blog.Model.Site”类型的属性“Site”检测到自引用循环。路径“[0].Menus[0]”。
如何实施此处建议的修复: JSON.Net Self referencing loop detected
据我所知,EF core 没有实现延迟加载或代理创建。
我的控制器只返回这个查询生成的集合:
public async Task<List<Site>> GetActiveSites()
var query = db.Sites.Where(x => x.Active)
.Include(x => x.Menus)
.ThenInclude(m => m.MenuContentItems)
.ThenInclude(x => x.ContentItem);
return await query.ToListAsync();
地点:
站点(1) - 菜单(*) 菜单(1) - MenuontentItem(*) MenuContentItem(*) - ContentItem(1)【问题讨论】:
***.com/questions/17313632/… 查看 Stewart Hou 提供的答案。 您找到了实际的解决方案吗? @Drakoumel 是的,请参阅上面评论中的链接。 你可以看看我在 “Self Referencing Loop Detected” exception with JSON.Net 页面上的回答。 【参考方案1】:创建一个没有 EF 具有的双向映射的视图模型。从您的 ef 查询中填充该视图模型。
【讨论】:
以上是关于在 API 控制器中检测到 JSON.Net 自引用循环的主要内容,如果未能解决你的问题,请参考以下文章
检测反序列化的对象是不是缺少 Json.NET 中 JsonConvert 类的字段
Google 开发者控制台中的“我们检测到您的应用正在使用旧版本的 Google Play 开发者 API”警告是啥?
如何在 Asp.net Core Web Api 中默认使用 Newtonsoft.Json?
如何在 asp.net owin api 项目中启用 JSON.NET 序列化/反序列化跟踪?
使用 Json.Net 作为 MVC 中的默认格式化程序,而不是 API [重复]
如何在 ASP.NET Web API 中为 Json.NET 设置自定义 JsonSerializerSettings?