我有两个控制器FooController
和BooController
(最后一个是向后兼容的,我希望只有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;
});
BooController
和FooController
都返回带有大写驼峰表示法的数据。
如何仅使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"
}
]