Как установить пользовательские JsonSerializerSettings для Json.NET в MVC 4 Web API?


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

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

3 59

3 ответа:

вы можете настроить JsonSerializerSettings С помощью Formatters.JsonFormatter.SerializerSettings собственность в HttpConfiguration "объект".

например, вы можете сделать это в методе Application_Start ():

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

вы можете указать 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() в глобальном.асакс.cs:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
     Formatting = Newtonsoft.Json.Formatting.Indented,
     ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};

Ссылка:https://github.com/JamesNK/Newtonsoft.Json/issues/78

ответ заключается в добавлении этих 2 строк кода в Global.асакс.cs Application_Start метод

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

ссылки: Обработка Круговых Ссылок На Объекты