我知道ASP.NET Web API本地使用JSON.NET进行(de)序列化对象,但是有没有办法指定您想要使用的JsonSerializerSettings
对象?
例如,如果我想将type
信息包含在序列化的JSON字符串中该怎么办?通常,我会将设置注入.Serialize()
调用中,但是Web API默默地这样做。我找不到手动注入设置的方法。
您可以使用HttpConfiguration
对象中的Formatters.JsonFormatter.SerializerSettings
属性自定义JsonSerializerSettings
。
例如,您可以在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
答案是将这两行代码添加到global.asax.cs application_start方法
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.All;
参考:处理圆对象参考