Asp.net web api 仅对特定操作使用camel case序列化

Asp.net web api 仅对特定操作使用camel case序列化,asp.net-web-api,Asp.net Web Api,我使用WebAPI已经有一段时间了,并且通常将其设置为使用驼峰式json序列化,现在这种序列化非常常见,并且到处都有很好的文档记录 然而,最近,在一个更大的项目中,我遇到了一个更具体的要求:我们需要使用驼峰式json序列化,但由于我们的客户端脚本存在向后兼容性问题,我只希望它发生在特定的操作中,以避免破坏(非常大的)网站的其他部分 我认为一个选项是拥有一个自定义内容类型,但这需要客户机代码来指定它 还有其他选择吗 谢谢 试试这个: 公共类CamelCasingFilterAttribute:Ac

我使用WebAPI已经有一段时间了,并且通常将其设置为使用驼峰式json序列化,现在这种序列化非常常见,并且到处都有很好的文档记录

然而,最近,在一个更大的项目中,我遇到了一个更具体的要求:我们需要使用驼峰式json序列化,但由于我们的客户端脚本存在向后兼容性问题,我只希望它发生在特定的操作中,以避免破坏(非常大的)网站的其他部分

我认为一个选项是拥有一个自定义内容类型,但这需要客户机代码来指定它

还有其他选择吗

谢谢

试试这个:

公共类CamelCasingFilterAttribute:ActionFilterAttribute
{
私有JsonMediaTypeFormatter\u camelCasingFormatter=new JsonMediaTypeFormatter();
公共CamelCasingFilterAttribute()
{
_camelCasingFormatter.SerializerSettings.ContractResolver=新的CamelCasePropertyNamesContractResolver();
}
公共覆盖无效OnActionExecuted(HttpActionExecuteContext ActionExecuteContext)
{
ObjectContent=actionExecutedContext.Response.content作为ObjectContent;
如果(内容!=null)
{
if(content.Formatter是JsonMediaTypeFormatter)
{
ActionExecuteContext.Response.Content=新的ObjectContent(Content.ObjectType、Content.Value、\u camelCasingFormatter);
}
}
}
}

将此[CamelCasingFilter]属性应用于任何要使用camel case的操作。它将接收您将要发送回的任何JSON响应,并将其转换为使用驼峰大小写作为属性名。

请注意,当使用WebAPI OData和返回SingleResult的操作时,此解决方案不起作用。您需要将内容属性设置为的最内层行改为:var newContent=newobjectcontent(Content.ObjectType,null,_camelCasingFormatter);newContent.Value=content.Value;actionExecuteContext.Response.Content=newContent;有没有相反的方法,即默认情况下使用CamelCase,但在操作中添加“NoCasingFilter”属性?明白了:
JsonFormatter.SerializerSettings.ContractResolver=new DefaultContractResolver()谢谢你的反向代码!这确保了默认情况下新操作是camelCased:-)在使用默认引导所有API控制器的IoC容器(例如Ninject、SimpleInjector等)时要非常小心。我花了很长时间试图弄明白为什么我没有添加这个属性的控制器会被骆驼壳。基本上,我的所有控制器都是默认创建的,该属性修改全局serialiser设置,以便在每个控制器上传播。