Подтвердить что ты не робот

Как настроить пользовательские настройки JsonSerializer для Json.NET в веб-API MVC 4?

Я понимаю, что ASP.NET Web API изначально использует Json.NET для (де) сериализации объектов, но есть ли способ указать объект JsonSerializerSettings, который вы хотите использовать?

Например, что, если я хотел бы включить type информацию в сериализованную строку JSON? Обычно я добавляю настройки в вызов .Serialize(), но веб-API делает это тихо. Я не могу найти способ вручную вводить настройки.

4b9b3361

Ответ 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;

Ссылка: Обработка ссылок на круговые объекты