我正在尝试在global.asax
。
var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
formatter.SerializerSettings = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
TypeNameHandling = TypeNameHandling.Objects,
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
使用以下代码序列化对象时,不使用全局序列化设置?
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(JsonConvert.SerializeObject(page))
};
是不是可以像这样设置全局序列化设置,还是我错过了什么?
答案 0 :(得分:67)
设置JsonConvert.DefaultSettings
就可以了。
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Formatting = Formatting.Indented,
TypeNameHandling = TypeNameHandling.Objects,
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
答案 1 :(得分:5)
接受的答案对我不起作用。在.netcore中,我可以使用它...
services.AddMvc(c =>
{
....
}).AddJsonOptions(options => {
options.SerializerSettings.Formatting = Formatting.Indented;
....
})
答案 2 :(得分:2)
在您的操作中执行以下操作,以便您可以返回内容协商的响应,并且格式化设置也可以生效。
return Request.CreateResponse(HttpStatusCode.OK, page);
答案 3 :(得分:1)
您对设置序列化程序的位置是正确的。但是,当使用请求的内容类型JSON对您的站点发出请求时,将使用该序列化程序。它不是调用SerializeObject时使用的设置的一部分。您可以通过公开属性公开定义global.asax的JSON序列化设置来解决此问题。
public static JsonSerializerSettings JsonSerializerSettings
{
get
{
return GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
}
}
然后在控制器中进行序列化时使用此属性设置序列化设置:
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(JsonConvert.SerializeObject(page, WebApiApplication.JsonSerializerSettings))
};