如何为 dotnet 核心 api 正确设置 snake case JSON?

How to properly set up snake case JSON for dotnet core api?

我已经通过在我的 Startup.cs 中使用以下内容将 api 响应 序列化为 snake_case 命名约定。这样 returns 我的 DTO 就像蛇壳一样 JSON.

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

这就是我想要的一半。但是当我 post snake-cased 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
}

编辑:

好吧,原来我在 JSON 中遗漏了一些值,我 posted 到 API。 api 需要它们,但没有出现任何错误或其他问题。

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

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

您忘记了引号:

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

改变这个,同样有效。

自 ASP.NET Core 3.0

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