设置默认的全局json序列化程序设置

时间:2014-02-16 18:45:11

标签: c# json asp.net-web-api json.net asp.net-mvc-5

我正在尝试在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))
};

是不是可以像这样设置全局序列化设置,还是我错过了什么?

4 个答案:

答案 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))
};