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

Установка глобальных настроек json serializer по умолчанию

Я пытаюсь установить глобальные параметры сериализатора, как это, в моем 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))
};

Невозможно установить глобальные параметры сериализатора, подобные этому, или я что-то не хватает?

4b9b3361

Ответ 1

Настройка JsonConvert.DefaultSettings сделала трюк.

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

Ответ 2

Просто выполните следующие действия в своем действии, чтобы вы могли вернуть ответ, согласованный с контентом, а также ваши настройки форматирования могут вступить в силу.

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

Ответ 3

Вы правильно знаете, где установить сериализатор. Однако этот сериализатор используется, когда запрос на ваш сайт выполняется с запрошенным типом содержимого JSON. Он не является частью настроек, используемых при вызове SerializeObject. Вы можете обойти это, разоблачив настройки сериализации JSON, определенные global.asax через свойство.

public static JsonSerializerSettings JsonSerializerSettings
{
    get
    {
        return GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
    }
}

И затем используйте это свойство для установки параметров сериализации при выполнении сериализации внутри ваших контроллеров:

return new HttpResponseMessage(HttpStatusCode.OK)
{
    Content = new StringContent(JsonConvert.SerializeObject(page, WebApiApplication.JsonSerializerSettings))
};