首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检测到JSON.Net自引用循环

检测到JSON.Net自引用循环
EN

Stack Overflow用户
提问于 2012-11-22 18:06:12
回答 11查看 158.6K关注 0票数 145

我有一个mssql数据库为我的网站在4个表。

当我使用这个的时候:

代码语言:javascript
复制
public static string GetAllEventsForJSON()
{
    using (CyberDBDataContext db = new CyberDBDataContext())
    {
        return JsonConvert.SerializeObject((from a in db.Events where a.Active select a).ToList(), new JavaScriptDateTimeConverter());
    }
}

该代码会导致以下错误:

Newtonsoft.Json.JsonSerializationException:检测到'DAL.CyberUser‘类型的属性'CyberUser’的自引用循环。路径'.EventRegistrations.CyberUser.UserLogs'.

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-11-25 18:01:30

我刚刚在Parent/Child集合中遇到了同样的问题,并找到了解决我问题的那篇文章。我只想显示父集合项目的列表,不需要任何子数据,因此我使用了以下内容,它工作得很好:

代码语言:javascript
复制
JsonConvert.SerializeObject(ResultGroups, Formatting.None,
                        new JsonSerializerSettings()
                        { 
                            ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                        });

JSON.NET Error Self referencing loop detected for type

它还引用了位于以下位置的Json.NET Codeplex页:

http://json.codeplex.com/discussions/272371

文档:

票数 286
EN

Stack Overflow用户

发布于 2013-09-17 00:37:18

修复方法是忽略循环引用,并且不序列化它们。此行为在JsonSerializerSettings中指定。

具有过载的Single JsonConvert

代码语言:javascript
复制
JsonConvert.SerializeObject((from a in db.Events where a.Active select a).ToList(), Formatting.Indented,
    new JsonSerializerSettings() {
        ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
    }
);

如果您想将其设置为默认行为,请添加一个全局设置,其代码为Global.asax.cs中的Application_Start()

代码语言:javascript
复制
JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
     Formatting = Newtonsoft.Json.Formatting.Indented,
     ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};

参考:https://github.com/JamesNK/Newtonsoft.Json/issues/78

票数 51
EN

Stack Overflow用户

发布于 2017-07-19 02:30:50

如果使用ASP.NET核心MVC,请将以下代码添加到startup.cs文件的ConfigureServices方法中:

代码语言:javascript
复制
services.AddMvc()
    .AddJsonOptions(
        options => options.SerializerSettings.ReferenceLoopHandling =            
        Newtonsoft.Json.ReferenceLoopHandling.Ignore
    );
票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13510204

复制
相关文章

相似问题

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