Установка глобальных настроек 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))
};
Невозможно установить глобальные параметры сериализатора, подобные этому, или я что-то не хватает?
Ответы
Ответ 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))
};