我有两个控制器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"
}
]