我有一个mssql数据库为我的网站在4个表。
当我使用这个的时候:
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'.
发布于 2012-11-25 18:01:30
我刚刚在Parent/Child集合中遇到了同样的问题,并找到了解决我问题的那篇文章。我只想显示父集合项目的列表,不需要任何子数据,因此我使用了以下内容,它工作得很好:
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
文档:
发布于 2013-09-17 00:37:18
修复方法是忽略循环引用,并且不序列化它们。此行为在JsonSerializerSettings
中指定。
具有过载的Single JsonConvert
:
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()
:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
Formatting = Newtonsoft.Json.Formatting.Indented,
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};
发布于 2017-07-19 02:30:50
如果使用ASP.NET核心MVC,请将以下代码添加到startup.cs文件的ConfigureServices方法中:
services.AddMvc()
.AddJsonOptions(
options => options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
https://stackoverflow.com/questions/13510204
复制相似问题