设置JsonConvert.DefaultSettings asp net core 2.0不能按预期工作

我在Startup.cs中有以下代码,并期望它覆盖默认的序列化选项。 我希望它覆盖我的asp net core 2.0项目中的每一个序列化,但是动作返回值不正确,我认为这个全局属性在core 2.0中不起作用

我把它写在app.UseMvc()之前的配置中;

JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Formatting = Formatting.Indented, TypeNameHandling = TypeNameHandling.Objects, ContractResolver = new CamelCasePropertyNamesContractResolver(), Converters = new List { new StringEnumConverter() } }; 

这部分是答案,因为它没有使用OP指定的方法,但是尝试在Global.asax的 Application_Start()中添加下面的代码,看看是否可行。

 HttpConfiguration conf= GlobalConfiguration.Configuration; conf.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; 

我之前在Github上看到过这个问题,我相信上面的function,因为它会将全局设置设置为Serializer。 SerializerSettings属性包含可以更改的其他设置,如果我没有弄错的话,这些更改应该在整个应用程序中共享。

至于问题中的方法,正如我从发行说明中所理解的那样 ,您需要在.serialize()方法中传递此设置,因为默认情况下它们不会被序列化程序使用。

在ASP.NET Core中,这是在Startup.ConfigureServices应用程序上的服务时配置的。 AddJsonOptions(Action)扩展返回的AddMvc()有一个流畅的AddJsonOptions(Action) AddMvc()扩展。 MvcJsonOptions公开了一个SerializerSettings属性,您可以在操作代码中配置该属性。

因此,它不是在注册MVC之前配置一次,而是作为MVC注册的一部分完成的。

结合您的设置的示例:

 services.AddMvc() .AddJsonOptions( options => { options.SerializerSettings.Formatting = Formatting.Indented; options.SerializerSettings.TypeNameHandling = TypeNameHandling.Objects; options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); options.SerializerSettings.Converters.Add(new StringEnumConverter()); });