CamelCase json默认但不适用于特定控制器

时间:2013-05-02 19:56:49

标签: asp.net-web-api

我想要一个特定的控制器返回一个字典

的所有控制器结果上的camel cased JSON

我试过这个

public class PascalCaseConfigAttribute : Attribute, IControllerConfiguration
{
    public void Initialize(HttpControllerSettings config,
                           HttpControllerDescriptor controllerDescriptor)
    {
        var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().Single();
        jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
    }
}

但是这改变了全局配置,所以在使用该属性调用任何控制器后,我们将返回到Pascal的情况。

我如何解决这个问题,默认是驼峰情况和明确修复某个控制器的Paascal案例?

编辑:这有效,但感觉有点落后

public class PascalCaseConfigAttribute : Attribute, IControllerConfiguration
{
    public void Initialize(HttpControllerSettings config,
                           HttpControllerDescriptor controllerDescriptor)
    {
        var formatter = config.Formatters.OfType<JsonMediaTypeFormatter>().Single();
        config.Formatters.Remove(formatter);

        formatter = new JsonMediaTypeFormatter();
        formatter.SerializerSettings.ContractResolver = new DefaultContractResolver();

        config.Formatters.Add(formatter);
    }
}

1 个答案:

答案 0 :(得分:0)

新建Json格式化程序(您的第二个代码块)最适合解决不修改全局格式化程序状态的问题,因为您已经想到了+内容协商,反序列化,帮助页面等功能也考虑了每个控制器的配置。因此,在此处设置您的设置也可以很好地与其他功能集成。