未应用MVC AddJsonOptions ReferenceLoopHandling配置

时间:2017-11-30 15:37:59

标签: c# asp.net-core json.net asp.net-core-webapi

我有另一个ASP.NET Core 2 / Angular 2应用程序使用的ASP.NET Core 2 API C#项目。我已将API项目MVC服务JSON选项ReferenceLoopHandling配置为Ignore,例如

services.AddMvc().AddJsonOptions(options =>
    {
        options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
    });

然而,当我运行我的应用程序时,我仍然会检测到一个"自我参考循环...'我的一个HTTP GET方法出错。

在调试模式下,如果在结果序列化之前暂停方法并手动运行序列化,例如

?Newtonsoft.Json.JsonConvert.SerializeObject(
    myDataObject, 
    new Newtonsoft.Json.JsonSerializerSettings 
    { 
        ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
    })

数据按预期序列化而没有错误。

为什么不将服务配置应用于此方法?

1 个答案:

答案 0 :(得分:6)

ASP.NET Core MVC有自己的JsonSerializerSettings对象,可以看到here;这是您在调用AddJsonOptions时配置的内容。您应用于此实例的设置不适用于您可能取消JsonConvert的方法。为了影响这些方法,您需要设置DefaultSettings属性。 e.g:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
};

您可以在Startup课程或某个Program课程中的某个位置执行此操作。