自引用循环 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();
我的项目是 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();