Я пытаюсь создать атрибут, который будет сериализовать возврат данных от действия по-разномуWebAPI Временно Override JsonFormatter от OnActionExecuted
public override void OnActionExecuted(HttpActionExecutedContext filterContext)
{
var content = (filterContext.Response.Content as ObjectContent);
if (content == null)
{
return;
}
if (content.ObjectType.IsGenericType
&& content.ObjectType.GetGenericTypeDefinition() == typeof (Page<>))
{
var pageObject = (content.Value as IPage);
var jsonFormatterRule = new JsonFormatterRule();
var pageJson = JsonConvert.SerializeObject(pageObject.ItemsArray,
jsonFormatterRule.GetPascalCasedSettings());
//How do I set the content that \/ doesn't compile?
//filterContext.Response.Content = pageJson;
}
}
Это является JsonFormatterRules упаковывают кто хотел их видеть.
public JsonSerializerSettings GetDefaultSettings()
{
var settings = new JsonSerializerSettings()
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver(),
DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind,
};
settings.Converters.AddRange(defaultConfiguredConverters);
return settings;
}
public JsonSerializerSettings GetPascalCasedSettings()
{
var settings = this.GetDefaultSettings();
settings.ContractResolver = new DefaultContractResolver();
return settings;
}
Как я могу установить содержимое с момента выполнения? Я не могу поменять сериализатор по умолчанию на DefaultContract Globally, потому что он может пронизывать проблемы.
Также я бы предпочел не создавать новый ответ и копировать по заголовкам из старого, похожего на убийство.
Что именно вы хотите сделать? У вас есть другой сериализатор для некоторых действий? – dotctor
@dotctor Yeah Разный Сериализатор от некоторых действий, основанных на атрибуте –