自引用循环 EntityFramework 问题,另一种解决方法?

Self Reference loop EntityFramework problem, another way to solve it?

我的项目是 Web Api Core 5.0,我遇到了自我引用循环 EntityFrameworkCore 的问题

在我上一个项目中我使用了这个:

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

但在我当前的 .Net 核心版本上它不起作用, 我发现了这样的东西:

    services.AddMvc().AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
    });

但我不喜欢它,它在响应时显示 $Id 和 $value,这是我不想看到的 有没有另一种方法可以摆脱自引用循环?

我之前看过: JSON.NET Error Self referencing loop detected for type

这些对我没有帮助

这只是一个建议...因为您的问题是关于 EF 的——但内容似乎源于 NewtonSoft 和可能的 Swagger。因此,我认为对于您的参考循环问题,它可能与 Swagger 有更多关系。无论如何,我发现这可以为我解决这类问题。 (你需要 Swashbuckle.AspNetCore.Newtonsoft)

首先添加 NewtonSoft 选项。

   services.AddControllers()
       .AddNewtonsoftJson(opts =>
       {
           //opts.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
           //opts.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
           opts.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
       });

然后添加 swaggergen... 然后添加 newtonsoft 支持。

    services.AddSwaggerGen(c =>
    {
        ...
    });
    // NOW add 
    services.AddSwaggerGenNewtonsoftSupport();