如何在ASP.NET Web API中为Json.NET设置自定义JsonSerializerSettings?


75

我知道ASP.NET Web API本机使用Json.NET来(反序列化)对象,但是有没有一种方法可以指定要使用的JsonSerializerSettings对象?

例如,如果我想将type信息包括在序列化的JSON字符串中怎么办?通常,我会将设置注入到.Serialize()调用中,但是Web API会以静默方式进行操作。我找不到手动注入设置的方法。

Answers:


113

您可以JsonSerializerSettings使用中的Formatters.JsonFormatter.SerializerSettings属性来自定义HttpConfiguration对象中。

例如,您可以在Application_Start()方法中执行此操作:

protected void Application_Start()
{
    HttpConfiguration config = GlobalConfiguration.Configuration;
    config.Formatters.JsonFormatter.SerializerSettings.Formatting =
        Newtonsoft.Json.Formatting.Indented;
}

1
我无法在安装了HangFire的ASP.NET应用程序中使用它。它引用了不正确的库或其他内容。不得不使用对方的回答与默认设置..
彼得·库拉

您可以按照控制器或操作进行操作: stackoverflow.com/questions/44499041/…–
Alx

41

您可以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
};

参考:https : //github.com/JamesNK/Newtonsoft.Json/issues/78


3
FWIW,第二种方法是我最初尝试的方法,但是没有用。我不得不使用HttpConfiguration,而不是作为carlosfigueira的回答作为配置的设置JsonConvert.DefaultSettings并没有被观察到。
lc。

2
就我而言,全局设置usginJsonSerializerSettings 对我有用。我无法使HttpCOnfiguration正常工作,它又与另一个程序集方法(Hangifre)相提并论,不知道为什么。
Piotr Kula 2015年

我可以使用隐藏字段formHiddenField.Value = JsonConvert.SerializeObject(listaCursos, Formatting.Indented, jsonSerializerSettings);并使用JQuery获取值var data = $('#formHiddenField').val();吗?
Kiquenet '18

1

答案是将这两行代码添加到Global.asax.cs Application_Start方法中

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = 
    Newtonsoft.Json.PreserveReferencesHandling.All;

参考:处理圆形对象引用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.