设置默认的全局json序列化程序设置

Mar*_*cus 35 c# json json.net asp.net-web-api asp.net-mvc-5

我正在尝试在我的设置中设置这样的全局序列化设置global.asax.

var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
formatter.SerializerSettings = new JsonSerializerSettings
{
    Formatting = Formatting.Indented,
    TypeNameHandling = TypeNameHandling.Objects,
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};
Run Code Online (Sandbox Code Playgroud)

使用以下代码序列化对象时,不使用全局序列化程序设置?

return new HttpResponseMessage(HttpStatusCode.OK)
{
    Content = new StringContent(JsonConvert.SerializeObject(page))
};
Run Code Online (Sandbox Code Playgroud)

是不是可以像这样设置全局序列化设置,还是我错过了什么?

Mar*_*cus 74

设置JsonConvert.DefaultSettings成功了.

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    Formatting = Formatting.Indented,
    TypeNameHandling = TypeNameHandling.Objects,
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};
Run Code Online (Sandbox Code Playgroud)

  • 这根本不起作用.设置完全被忽略. (5认同)
  • 我必须将``GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings``设置为同一个对象,以确保该配置可以在任何地方使用.(在这种情况下:通过webapi并通过JsonConvert手动调用) (3认同)

Mic*_*ael 5

接受的答案对我不起作用。在.netcore中,我可以使用...

services.AddMvc(c =>
                 {
                 ....
                 }).AddJsonOptions(options => {
                     options.SerializerSettings.Formatting = Formatting.Indented;
                     ....
                 })
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在使用 JsonConvert 进行任何手动序列化/反序列化,您将需要使用上面接受的答案。因此,如果您想要一致性,则需要同时设置两者。 (2认同)