【问题标题】:How to properly set up snake case JSON for dotnet core api?如何为 dotnet core api 正确设置蛇案例 JSON?
【发布时间】:2017-07-10 06:43:48
【问题描述】:

通过在我的Startup.cs 中使用以下内容,我设法将 API 响应 序列化为 snake_case 命名约定。这样,它将我的 DTO 作为蛇形 JSON 返回。

services
     .AddMvc()
     .AddJsonOptions(x =>
     {
         x.SerializerSettings.ContractResolver = new DefaultContractResolver
         {
             NamingStrategy = new SnakeCaseNamingStrategy()
         };
     });

这就是我想要的一半。但是当我发布蛇形 JSON 时,请参见下面的示例,它不会将值绑定到我在 api 上的 DTO。例如UserProfile 数组和CreatedOnModifiedOn 没有得到任何值。

{
   "user_profiles": [
      {
         "id": 1,
         "created_on": "2017-02-08T19:54:59.370Z",
         "modified_on": "2017-02-18T14:10:42.248Z",
         "email": "my@email.com",
         "username": "my_username"
      }
   ],
   "id": 1,
   "created_on": "2017-02-08T19:50:31.690Z",
   "modified_on": 2017-02-08T19:50:31.690Z,
   "name": "My Company Name"
} 

设置它的正确方法是什么,以便 API 在发送到 api 时处理蛇形 JSON 在从 api 请求时将其作为蛇形发送?

我的 DTO 的

 public class CompanyDto
 {
      public int Id { get; set; }
      public DateTime CreatedOn { get; set; }
      public DateTime ModifiedOn { get; set; }
      public string Name { get; set; }
      public IEnumerable<UserProfileDto> UserProfiles { get; set; }
 }

 public class UserProfileDto
 {
      public int Id { get; set; }
      public DateTime CreatedOn { get; set; }
      public DateTime ModifiedOn { get; set; }
      public string Email { get; set; }
      public string Username { get; set; }
 }

我在控制器上的 PUT 操作

[HttpPut("{id}")]
public async Task<IActionResult> Put(int id, [FromBody]CompanyDto value)
{
     // Body
}

编辑:

好吧,事实证明我在发布到 API 的 JSON 中缺少一些值。它们是 api 所要求的,但没有出现任何错误或其他问题。

所以要回答这个问题,根据我的经验,使用以下内容足以将 JSON 输出/输入用于 dotnet 核心 api。相反,它只是让预期的模型null 叹了口气。

services
     .AddMvc()
     .AddJsonOptions(x =>
     {
         x.SerializerSettings.ContractResolver = new DefaultContractResolver
         {
             NamingStrategy = new SnakeCaseNamingStrategy()
         };
     });

【问题讨论】:

    标签: json .net-core asp.net-core-webapi


    【解决方案1】:

    您忘记了以下引号:

    "modified_on": 2017-02-08T19: 50: 31.690Z,
    

    改变这个,也可以。

    【讨论】:

    • 很好,尽管这是一个复制/粘贴错误。但是,由于您的回答使我走上了解决问题的道路(请参阅编辑),我会接受它。这是我忘记发布的缺少必需属性的情况,在这种情况下缺少modified_on 值。
    【解决方案2】:

    自 ASP.NET Core 3.0 起

    services.AddMvc().AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ContractResolver = new DefaultContractResolver
        {
            NamingStrategy = new SnakeCaseNamingStrategy()
        };
    });
    

    【讨论】:

    • 我想你的意思是services.AddMvc().AddNewtonsoftJson
    猜你喜欢
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2017-03-31
    • 2022-11-18
    • 1970-01-01
    • 2016-01-16
    • 2019-10-30
    相关资源
    最近更新 更多