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



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

是否可以像这样设置全局序列化程序设置,或者我错过了什么?

设置JsonConvert.DefaultSettings就可以了。

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    Formatting = Formatting.Indented,
    TypeNameHandling = TypeNameHandling.Objects,
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};

接受的答案对我不起作用。 在 .netcore 中,我让它与...

services.AddMvc(c =>
                 {
                 ....
                 }).AddJsonOptions(options => {
                     options.SerializerSettings.Formatting = Formatting.Indented;
                     ....
                 })

只需在操作中执行以下操作,即可返回内容协商的响应,并且格式化程序设置也可以生效。

return Request.CreateResponse(HttpStatusCode.OK, page);

关于在何处设置序列化程序是正确的。但是,当使用请求的内容类型 JSON 向网站发出请求时,将使用该序列化程序。它不是调用序列化对象时使用的设置的一部分。可以通过属性公开定义的 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))
};

相关内容

  • 没有找到相关文章

最新更新