如何在MVC 4 Web API中为Json.NET设置自定义JsonSerializerSettings?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (60)

我知道ASP.NET Web API本身使用Json.NET来处理(反)序列化对象,但是有没有办法指定一个JsonSerializerSettings你想要的对象?

例如,如果我想将type信息包含到序列化的JSON字符串中,该怎么办?通常情况下,我会将设置注入.Serialize()调用中,但Web API会默默执行。我找不到手动注入设置的方法。

提问于
用户回答回答于

可以JsonSerializerSettings通过使用对象中的Formatters.JsonFormatter.SerializerSettings属性来自定义HttpConfiguration

例如,你可以在Application_Start()方法中做到这一点:

protected void Application_Start()
{
    HttpConfiguration config = GlobalConfiguration.Configuration;
    config.Formatters.JsonFormatter.SerializerSettings.Formatting =
        Newtonsoft.Json.Formatting.Indented;
}
用户回答回答于

可以JsonSerializerSettings为每个指定JsonConvert,并且可以设置全局默认值。

单重JsonConvert过载:

// Option #1.
JsonSerializerSettings config = new JsonSerializerSettings { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore };
this.json = JsonConvert.SerializeObject(YourObject, Formatting.Indented, config);

// Option #2 (inline).
JsonConvert.SerializeObject(YourObject, Formatting.Indented,
    new JsonSerializerSettings() {
        ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
    }
);

使用Application_Start()Global.asax.cs中的代码进行全局设置

JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
     Formatting = Newtonsoft.Json.Formatting.Indented,
     ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};

参考:https//github.com/JamesNK/Newtonsoft.Json/issues/78

扫码关注云+社区