在 ASP.NET WebAPI 中,我知道您可以在 global.aspx 中使用CamelCasePropertyNamesContractResolver()将默认的 json 格式化程序设置为使用驼峰式大小写,这将强制所有 json 序列化为驼峰式大小写。
但是,我需要能够在“每个控制器”实例上设置它,而不是全局解决方案。
这可能吗?
在 ASP.NET WebAPI 中,我知道您可以在 global.aspx 中使用CamelCasePropertyNamesContractResolver()将默认的 json 格式化程序设置为使用驼峰式大小写,这将强制所有 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 的任何 Controller 类。
[CamelCaseControllerConfig]
这个堆栈溢出答案应该会有所帮助。它向您展示了如何创建一个 ActionFilter,它可以应用于您希望使用 CamelCasing 的任何操作。
我知道这已经很老了,但是我对接受的答案有疑问,因为在删除和重新添加后,格式化程序还有其他必要的更改不再存在。我只是通过修改现有的格式化程序来做到这一点,如本要点所示:https ://gist.github.com/mauricedb/5356933 。