Мне удалось сериализовать ответы на соглашение об именовании 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()
};
});
Хорошая уловка, хотя это была ошибка копирования/вставки. Но так как ваш ответ поставил меня на путь решения проблемы (см. Править), я соглашусь с ней. Это был случай отсутствия необходимых свойств, которые я забыл опубликовать, в этом случае отсутствует значение «modified_on». –