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

我知道ASP.NET Web API本身使用Json.NET来(序列化)对象,但是有没有一种方法来指定一个JsonSerializerSettings对象?

例如,如果我想将type信息包含到序列化的JSONstring中呢? 通常情况下,我.Serialize()设置注入.Serialize()调用,但Web API无声无息地进行。 我找不到手动注入设置的方法。

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

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

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

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

带过载的单个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 } ); 

Global.asax.cs中的Application_Start()中的代码的全局设置

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

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

答案是将这2行代码添加到Global.asax.cs Application_Start方法

 var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All; 

参考: 处理循环对象引用