Как настроить пользовательские настройки JsonSerializer для Json.NET в веб-API MVC 4?
Я понимаю, что ASP.NET Web API изначально использует Json.NET для (де) сериализации объектов, но есть ли способ указать объект JsonSerializerSettings
, который вы хотите использовать?
Например, что, если я хотел бы включить type
информацию в сериализованную строку JSON? Обычно я добавляю настройки в вызов .Serialize()
, но веб-API делает это тихо. Я не могу найти способ вручную вводить настройки.
Ответы
Ответ 1
Вы можете настроить JsonSerializerSettings
с помощью свойства Formatters.JsonFormatter.SerializerSettings
в объекте HttpConfiguration
.
Например, вы можете сделать это в методе Application_Start():
protected void Application_Start()
{
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Formatting =
Newtonsoft.Json.Formatting.Indented;
}
Ответ 2
Вы можете указать 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
Ответ добавляет эти 2 строки кода в метод Global.asax.cs Application_Start
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.All;
Ссылка: Обработка ссылок на круговые объекты