2017-09-22 57 views
0

我在Startup.cs中有以下代码,并期望它覆盖默认的序列化选项。我希望它覆盖我的asp net核心2.0项目中的每一个序列化,但行动返回值是不正确的,我认为这个全球属性是不是在核心2.0工作设置JsonConvert.DefaultSettings asp net core 2.0不能按预期工作

我已经写在里面配置恰好之前的应用程序。 UseMvc();

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

回答

1

这部分是一个答案,因为它没有使用,但是规定的方法OP,尝试添加下面的代码里面的你Application_Start()的Global.asax,看看是否会工作。

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

我已经在Github上以前看过这个问题,我相信上面的做,因为它会设置全局设置,以串行的伎俩。 SerializerSettings属性包含可以更改的其他设置,如果我没有弄错,那么应该在整个应用程序中共享这些更改。

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

+0

我说,这个项目是ASP.NET的核心2.0,所以我不能在我的项目中使用所提供的代码 –

1

在ASP.NET Core中,在配置Startup.ConfigureServices中的应用程序上的服务时进行配置。有一个流畅的AddJsonOptions(Action<MvcJsonOptions>)扩展到由AddMvc()扩展返回的IMvcBuilderMvcJsonOptions公开了您可以在您的操作代码中配置的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()); 
    });