我已设法通过在snake_case
中使用以下内容,将api 响应序列化为Startup.cs
命名约定。这样它就可以将我的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&#39>
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要求他们,但没有任何错误或事情。
所以为了回答这个问题,根据我的经验,使用以下内容就足以让蛇包装一个dotnet核心api的JSON输出/输入。相反,它只是使预期的模型null
叹了口气。
services
.AddMvc()
.AddJsonOptions(x =>
{
x.SerializerSettings.ContractResolver = new DefaultContractResolver
{
NamingStrategy = new SnakeCaseNamingStrategy()
};
});
答案 0 :(得分:2)
你忘了引号:
"modified_on": 2017-02-08T19: 50: 31.690Z,
更改此功能也适用。
答案 1 :(得分:1)
自ASP.NET Core 3.0起
services.AddControllers().AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver
{
NamingStrategy = new SnakeCaseNamingStrategy()
};
});