2017-02-20 89 views
1

我已经设法通过在我的Startup.cs中使用以下内容,将api 响应snake_case命名约定串行化。这样它返回我的DTO的蛇作为JSON的外壳。如何正确设置用于dotnet core api的蛇情况JSON?

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

这是我想要的一半。但是,当我发布以蛇为基础的JSON时,请参阅下面的示例,它不会将值绑定到我的DTO上的api。例如,UserProfile阵列和CreatedOnModifiedOn没有得到任何值。

{ 
    "user_profiles": [ 
     { 
     "id": 1, 
     "created_on": "2017-02-08T19:54:59.370Z", 
     "modified_on": "2017-02-18T14:10:42.248Z", 
     "email": "[email protected]", 
     "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请求时,API处理蛇套管JSON的正确方法?

我的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的一些值API。他们被api所要求,但没有得到任何错误或某些东西。

所以要回答这个问题,根据我的经验,使用以下代码就足够了蛇的JSON输出/输入为dotnet核心api。相反,它只是让预期的模型null感叹。

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

回答

1

你忘了引号:

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

改变这一点,工作也是如此。

+1

好抓,即使它是复制/粘贴错误。但是,由于你的答案使我找到了解决问题的途径(请参阅编辑),我会接受它。这是我忘记发布的必需属性的一种情况,在这种情况下缺少'modified_on'值。 –