Tom*_*ers 9 json .net-core asp.net-core-webapi
我已经成功地序列化API响应到snake_case
在我使用以下命名约定Startup.cs
。通过这种方式,它将我的 DTO 返回为蛇形 JSON。
services
.AddMvc()
.AddJsonOptions(x =>
{
x.SerializerSettings.ContractResolver = new DefaultContractResolver
{
NamingStrategy = new SnakeCaseNamingStrategy()
};
});
Run Code Online (Sandbox Code Playgroud)
这是我想要的一半。但是当我发布蛇形 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"
}
Run Code Online (Sandbox Code Playgroud)
设置它以便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; }
}
Run Code Online (Sandbox Code Playgroud)
我在控制器上的 PUT 操作
[HttpPut("{id}")]
public async Task<IActionResult> Put(int id, [FromBody]CompanyDto value)
{
// Body
}
Run Code Online (Sandbox Code Playgroud)
编辑:
好吧,结果我在发布到 API 的 JSON 中遗漏了一些值。api 需要它们,但没有出现任何错误或其他问题。
因此,要回答这个问题,根据我的经验,使用以下内容足以为 dotnet 核心 api 对 JSON 输出/输入进行蛇形外壳。相反,它只是让预期的模型null
叹了口气。
services
.AddMvc()
.AddJsonOptions(x =>
{
x.SerializerSettings.ContractResolver = new DefaultContractResolver
{
NamingStrategy = new SnakeCaseNamingStrategy()
};
});
Run Code Online (Sandbox Code Playgroud)
从 ASP.NET Core 3.0 开始
services.AddMvc().AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver
{
NamingStrategy = new SnakeCaseNamingStrategy()
};
});
Run Code Online (Sandbox Code Playgroud)
您忘记了以下引号:
"modified_on": 2017-02-08T19: 50: 31.690Z,
Run Code Online (Sandbox Code Playgroud)
改变这个,也有效。
归档时间: |
|
查看次数: |
5254 次 |
最近记录: |