在ASP.NET Core中检测到自引用循环

sun*_*nil 34 json.net asp.net-core-mvc asp.net-core

当我尝试使用ASP.NET Core Newsoft JSON.NET序列化某些域对象时,它会抛出异常,因为它正在检测自引用循环.

在ASP.NET 4中,我们以这种方式全局修复它: JSON.NET错误检测到类型的自引用循环

我们如何在ASP.NET Core中解决这个问题?

Bla*_*ord 92

与ASP.NET Core(以前的Asp.Net 5)相比,ASP.NET 4中处理自引用循环的方式没有区别.您在帖子中引用的问题中概述的原则仍然适用.但是,考虑到配置和引导应用程序的新方法,在ASP.NET Core中设置此属性显然略有不同:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().AddJsonOptions(options => {
        options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
    });
    services.AddEntityFramework().AddSqlServer().AddDbContext<IvoryPacketDbContext>(
        options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])
    );
}
Run Code Online (Sandbox Code Playgroud)

  • 要清楚,只需要"ReferenceLoopHandling"行即可解决此问题. (14认同)
  • 用[[JsonIgnore]`装饰属性为我解决了它 (2认同)
  • 您可以通过仅选择所需的字段并排除生成引用循环的字段来避免自引用的可能性 (2认同)