34

在 ASP.NET WebAPI 中,我知道您可以在 global.aspx 中使用CamelCasePropertyNamesContractResolver()将默认的 json 格式化程序设置为使用驼峰式大小写,这将强制所有 json 序列化为驼峰式大小写。

但是,我需要能够在“每个控制器”实例上设置它,而不是全局解决方案。

这可能吗?

4

4 回答 4

71

感谢@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]
于 2013-11-13T16:47:27.080 回答
10

是的,有可能...您可以使用IControllerConfiguration来定义每个控制器的特定配置..

是描述此场景的示例。您可以在此处快速查看如何使用此接口(来自示例)。

于 2013-11-13T15:35:49.317 回答
4

这个堆栈溢出答案应该会有所帮助。它向您展示了如何创建一个 ActionFilter,它可以应用于您希望使用 CamelCasing 的任何操作。

于 2013-11-13T15:09:42.450 回答
0

我知道这已经很老了,但是我对接受的答案有疑问,因为在删除和重新添加后,格式化程序还有其他必要的更改不再存在。我只是通过修改现有的格式化程序来做到这一点,如本要点所示:https ://gist.github.com/mauricedb/5356933 。

于 2018-05-07T16:10:08.917 回答