2017-02-20 31 views
1

Мне удалось сериализовать ответы на соглашение об именовании snake_case, используя следующее в моем Startup.cs. Таким образом, он возвращает мой DTO как змеиный JSON.Как правильно настроить змеиный корпус JSON для ядра dotnet?

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

Это половина того, что я хочу. Но когда я отправляю JSON с змейкой, см. Ниже пример, он не привяжет значения к моему DTO на api. Например, массив UserProfile и CreatedOn, ModifiedOn не получают никаких значений.

{ 
    "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 обрабатывает змеиный накладного JSON, когда можно послать к апи и отправить его как змея случае при запросе от апи?

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 действие

Мои DTO на контроллере

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

EDIT:

Хорошо получается, что я пропускал некоторые значения в JSON я отправил к API. Они требовались апи, но не получили никаких ошибок или чего-то подобного.

Таким образом, для ответа на вопрос, по моему опыту, достаточно использовать для змеиного корпуса выход/выход JSON для ядра apnet. Вместо этого он просто сделал ожидаемую модель 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». –