Asp.net web api CamelCase json默认值,但不适用于specfic控制器

Asp.net web api CamelCase json默认值,但不适用于specfic控制器,asp.net-web-api,Asp.net Web Api,我希望对所有控制器结果使用驼峰大小写的JSON,除了返回字典的特定控制器 我试过这个 public class PascalCaseConfigAttribute : Attribute, IControllerConfiguration { public void Initialize(HttpControllerSettings config, HttpControllerDescriptor controllerDescript

我希望对所有控制器结果使用驼峰大小写的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案例

我如何修复某个控制器的默认情况是camel case和explicit fix Paascal case

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

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);
    }
}

更新JSON格式化程序,您的第二个代码块最适合于解决不修改全局格式化程序状态的问题,如图中的内容协商、反序列化、帮助页都可以考虑每个控制器配置。因此,这里的设置与其他功能也能很好地集成。

此线程的第一个答案听起来是一个合理的解决方案:是的,我正在使用上面的方法;