如何在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;
参考: 处理循环对象引用
- 使用IHttpActionResult返回非正常响应的内容
- Asp.net Web Api将响应状态码设置为数字
- POSTstring到ASP.NET Web Api应用程序 – 返回null
- 从2012年到2013年更新后无法加载文件或程序集“System.Web.Http 4.0.0”
- 自定义JsonConverter(Web API)中的Json.Net JsonSerializer中的自引用循环
- 如何在WebAPI中获取POST数据?
- 如何使用System.Net.HttpClient发布一个复杂的types?
- 点字符“。” 在MVC Web API 2中用于请求如api / people / STAFF.45287
- 如何在C#中编写Json文件?