获取 ASP.NET Core 8 MVC 控制器以不变的方式返回 JSON 属性,而无需小写属性名称

问题描述 投票:0回答:1

我有一个 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)
,但再次没有运气。

asp.net asp.net-core json.net
1个回答
0
投票

感谢 PowerMouse。

就是这样。示例显示了 json.net 和 newtonsoft,可能只需要一个,具体取决于所使用的内容。

services
      .AddMvc().AddJsonOptions( jsonOpt =>
      {
          jsonOpt.JsonSerializerOptions.PropertyNamingPolicy = null;
      })
      .AddNewtonsoftJson(opts =>
      {
          opts.SerializerSettings.ContractResolver = null;
       
      })
© www.soinside.com 2019 - 2024. All rights reserved.