我有一个 ASP.NET Core 8 控制器。
当我在下面的
Newtonsoft.Json
返回中返回使用 Ok
序列化的对象时,它会将 JSON 中的属性更改为小写。
我希望它们保持 C# 中声明的那样,而不必在所有属性上放置
JsonPropertyName
属性。
而不是这个:
{
"id":"0",
"name": "Foo"
}
我想得到这个表示:
{ "Id: "0", "Name": "Foo" }
这是用于此目的的 C# 类:
class Foo
{
public string Id { get; set; }
public string Name { get; set; }
}
/// </summary>
[ApiController]
public class ManagerApiController : ControllerBase
{
[Route("/api/v1/search-approval-workflows")]
[ValidateModelState]
[SwaggerOperation("SearchApprovalWorkflowsGet")]
public virtual IActionResult SearchApprovalWorkflowsGet([FromQuery] string s)
{
// ...
return OK(foo);
}
}
我试过了
DefaultContractResolver resolver =
new DefaultContractResolver
{
NamingStrategy = new DefaultNamingStrategy()
};
resolver.NamingStrategy.OverrideSpecifiedNames = false;
string json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings
{
ContractResolver = resolver,
Formatting = Formatting.Indented
});
return json;
但这没有用。
我也尝试过退货
new JsonResult(foo)
,但再次没有运气。
感谢 PowerMouse。
就是这样。示例显示了 json.net 和 newtonsoft,可能只需要一个,具体取决于所使用的内容。
services
.AddMvc().AddJsonOptions( jsonOpt =>
{
jsonOpt.JsonSerializerOptions.PropertyNamingPolicy = null;
})
.AddNewtonsoftJson(opts =>
{
opts.SerializerSettings.ContractResolver = null;
})