【发布时间】:2017-07-10 06:43:48
【问题描述】:
通过在我的Startup.cs 中使用以下内容,我设法将 API 响应 序列化为 snake_case 命名约定。这样,它将我的 DTO 作为蛇形 JSON 返回。
services
.AddMvc()
.AddJsonOptions(x =>
{
x.SerializerSettings.ContractResolver = new DefaultContractResolver
{
NamingStrategy = new SnakeCaseNamingStrategy()
};
});
这就是我想要的一半。但是当我发布蛇形 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"
}
设置它的正确方法是什么,以便 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; }
}
我在控制器上的 PUT 操作
[HttpPut("{id}")]
public async Task<IActionResult> Put(int id, [FromBody]CompanyDto value)
{
// Body
}
编辑:
好吧,事实证明我在发布到 API 的 JSON 中缺少一些值。它们是 api 所要求的,但没有出现任何错误或其他问题。
所以要回答这个问题,根据我的经验,使用以下内容足以将 JSON 输出/输入用于 dotnet 核心 api。相反,它只是让预期的模型null 叹了口气。
services
.AddMvc()
.AddJsonOptions(x =>
{
x.SerializerSettings.ContractResolver = new DefaultContractResolver
{
NamingStrategy = new SnakeCaseNamingStrategy()
};
});
【问题讨论】:
标签: json .net-core asp.net-core-webapi