我知道ASP.NET Web API本机使用Json.NET来(反序列化)对象,但是有没有一种方法可以指定要使用的JsonSerializerSettings
对象?
例如,如果我想将type
信息包括在序列化的JSON字符串中怎么办?通常,我会将设置注入到.Serialize()
调用中,但是Web API会以静默方式进行操作。我找不到手动注入设置的方法。
我知道ASP.NET Web API本机使用Json.NET来(反序列化)对象,但是有没有一种方法可以指定要使用的JsonSerializerSettings
对象?
例如,如果我想将type
信息包括在序列化的JSON字符串中怎么办?通常,我会将设置注入到.Serialize()
调用中,但是Web API会以静默方式进行操作。我找不到手动注入设置的方法。
Answers:
您可以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
};
HttpConfiguration
,而不是作为carlosfigueira的回答作为配置的设置JsonConvert.DefaultSettings
并没有被观察到。
JsonSerializerSettings
对我有用。我无法使HttpCOnfiguration正常工作,它又与另一个程序集方法(Hangifre)相提并论,不知道为什么。
formHiddenField.Value = JsonConvert.SerializeObject(listaCursos, Formatting.Indented, jsonSerializerSettings);
并使用JQuery获取值var data = $('#formHiddenField').val();
吗?