有没有办法设置Controller.Json ReferenceLoopHandling属性?
当解析具有两端定义的导航属性的实体时,它当前正在引发自引用循环。通过设置
解决了这个问题ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
有没有办法为Controller.Json方法执行此操作?
我找到了这段代码,但似乎没有用。
services.Configure<MvcOptions>(option =>
{
option.OutputFormatters.Clear();
var jsonOutputFormatter = new JsonOutputFormatter();
jsonOutputFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
option.OutputFormatters.Insert(0, jsonOutputFormatter);
});
答案 0 :(得分:13)
我认为更好的解决方案是在您的ConfigureServices中添加JsonOptions,如:
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
答案 1 :(得分:2)
问题是从前一段时间开始,但它仍然可以帮助其他人。
在Startup类的ConfigureServices方法中尝试:
services.AddMvc(options =>
{
((JsonOutputFormatter)options.OutputFormatters.Single(f => f.GetType() == typeof(JsonOutputFormatter))).SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
或
services.AddMvc(options =>
{
var jsonOutputFormatter = options.OutputFormatters.SingleOrDefault(f => f.GetType() == typeof(JsonOutputFormatter)) as JsonOutputFormatter;
if (jsonOutputFormatter != null)
jsonOutputFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
答案 2 :(得分:0)
这适用于.NET Core 3.0。
services.AddMvcCore().AddNewtonsoftJson(
options => options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore);