2017-02-20 20 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'值。 –

相關問題