【问题标题】:need help withself reference loop when serialize linq序列化 linq 时需要关于自引用循环的帮助
【发布时间】:2021-03-31 01:31:29
【问题描述】:

我知道之前有人问过这个问题,但我找不到任何解决我的问题的方法。 我正在开发一个包含 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”类型检测到自引用循环。路径“[0].User1.Users1”。

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

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

【问题讨论】:

    标签: json serialization


    【解决方案1】:

    解决此问题的唯一正确方法是不返回您的 Linq 对象,而是返回一个未绑定到您的数据库的 DTO/Model。如果要返回数据库对象,由于 Navigation 属性,您总是会遇到自引用循环。

    你没有提到你使用的是.NET Core还是.NET Framework,但是如果是Core,它根本不会使用web.config,而是你应该修改你的启动方法:

    services.AddControllers().AddNewtonsoftJson(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-19
      • 1970-01-01
      相关资源
      最近更新 更多