在 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?