【发布时间】:2016-05-05 15:16:19
【问题描述】:
我正在尝试创建一个属性,以不同方式序列化从操作返回的数据
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;
}
如何在执行操作时设置内容?我无法将默认序列化程序更改为全局默认合同,因为它可能会出现线程问题。
此外,我不希望不必创建新响应并从旧响应中复制标题,这似乎已经过时了。
【问题讨论】:
-
你到底想做什么?对某些操作有不同的序列化程序?
-
@dotctor 是的,序列化程序与基于属性的某些操作不同
标签: c# asp.net-web-api action-filter onactionexecuted