我有两个控制器FooControllerBooController(最后一个是为了向后兼容),我只希望FooController会返回其模型带有大写驼峰表示法(“ UpperCamelCase”)。

例如:

public class MyData
{
    public string Key {get;set;}
    public string Value {get;set;}
}

public class BooController : ControllerBase
{
    public ActionResult<MyData> GetData() { ... }
}
public class FooController : ControllerBase
{
    public ActionResult<MyData> GetData() { ... }
}


所需的GET输出:

GET {{domain}}/api/Boo/getData
[
    {
        "key": 1,
        "value": "val"
    }
]

GET {{domain}}/api/Foo/getData
[
    {
        "Key": 1,
        "Value": "val"
    }
]


如果我在AddJsonOptions中使用option.JsonSerializerOptions.PropertyNamingPolicy = null扩展名,例如:

services.AddMvc()
.AddJsonOptions(option =>
{
    option.JsonSerializerOptions.PropertyNamingPolicy = null;
});


BooControllerFooController均返回带有大写驼峰表示法的数据。

如何仅使FooController以大写驼峰表示法格式返回数据?

最佳答案

已解决(尽管性能较差且解决方案有些拙劣-希望有人提出更好的解决方案):

在旧版BooController内部,我在使用JsonSerializerSettings的自定义格式化程序返回响应之前对响应进行序列化:

public class BooController : ControllerBase
{
    public ActionResult<MyData> GetData()
    {
        var formatter = JsonConvert.DefaultSettings = () => new JsonSerializerSettings
        {
            Formatting = Formatting.Indented,
            ContractResolver = new CamelCasePropertyNamesContractResolver()
        };
        return Ok(JsonConvert.SerializeObject(response, Formatting.Indented, formatter()));
    }
}


造成:

GET {{domain}}/api/Boo/getData
[
    {
        "key": 1,
        "value": "val"
    }
]

08-17 14:53