如何为 dotnet 核心 api 正确设置蛇案例 JSON?

Tom*_*ers 9 json .net-core asp.net-core-webapi

我已经成功地序列化API响应snake_case在我使用以下命名约定Startup.cs。通过这种方式,它将我的 DTO 返回为蛇形 JSON。

services
     .AddMvc()
     .AddJsonOptions(x =>
     {
         x.SerializerSettings.ContractResolver = new DefaultContractResolver
         {
             NamingStrategy = new SnakeCaseNamingStrategy()
         };
     });
Run Code Online (Sandbox Code Playgroud)

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

{
   "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"
} 
Run Code Online (Sandbox Code Playgroud)

设置它以便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; }
 }
Run Code Online (Sandbox Code Playgroud)

我在控制器上的 PUT 操作

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

编辑:

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

因此,要回答这个问题,根据我的经验,使用以下内容足以为 dotnet 核心 api 对 JSON 输出/输入进行蛇形外壳。相反,它只是让预期的模型null叹了口气。

services
     .AddMvc()
     .AddJsonOptions(x =>
     {
         x.SerializerSettings.ContractResolver = new DefaultContractResolver
         {
             NamingStrategy = new SnakeCaseNamingStrategy()
         };
     });
Run Code Online (Sandbox Code Playgroud)

Hun*_*ach 7

从 ASP.NET Core 3.0 开始

services.AddMvc().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ContractResolver = new DefaultContractResolver
    {
        NamingStrategy = new SnakeCaseNamingStrategy()
    };
});
Run Code Online (Sandbox Code Playgroud)


Ric*_*ana 2

您忘记了以下引号:

"modified_on": 2017-02-08T19: 50: 31.690Z,
Run Code Online (Sandbox Code Playgroud)

改变这个,也有效。