在 ASP.NET WebAPI 中,我知道您可以将默认的 json 格式化程序设置为在全局中使用 CamelCasePropertyNamesContractResolver() 使用 Camel 大小写.aspx这将强制所有 json 序列化为驼峰大小写。
但是,我需要能够在"每个控制器"实例上设置它,而不是全局解决方案。
这可能吗?
多亏了@KiranChalla我才能比我想象的更容易实现这一目标。
这是我创建的非常简单的类:
using System;
using System.Linq;
using System.Web.Http.Controllers;
using System.Net.Http.Formatting;
using Newtonsoft.Json.Serialization;
public class CamelCaseControllerConfigAttribute : Attribute, IControllerConfiguration
{
public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
{
var formatter = controllerSettings.Formatters.OfType<JsonMediaTypeFormatter>().Single();
controllerSettings.Formatters.Remove(formatter);
formatter = new JsonMediaTypeFormatter
{
SerializerSettings = {ContractResolver = new CamelCasePropertyNamesContractResolver()}
};
controllerSettings.Formatters.Add(formatter);
}
}
然后,只需将该属性添加到您想要的任何控制器类中 CamelCase。
[CamelCaseControllerConfig]
是的,有可能...您可以使用IControllerConfiguration
来定义每个控制器的特定配置。
这是描述此方案的示例。您可以在此处快速查看应如何使用此接口(来自示例)。
这个堆栈溢出答案应该会有所帮助。它向您展示了如何创建一个动作过滤器,该过滤器可以应用于您希望使用CamelCasing的任何操作。
这已经很老了,但我对接受的答案有问题,因为在删除和重新添加后,格式化程序还有其他必要的更改不再存在。我只是通过修改现有的格式化程序来做到这一点,如以下 Gist: https://gist.github.com/mauricedb/5356933 所示。