【发布时间】:2019-04-27 10:24:12
【问题描述】:
将我的 ASP.Core API 从 2.2 迁移到 3.0 后,我发现使用 JSON 序列化时返回 DTO 的方式有些奇怪。
最初,我所有的回复都会以驼峰形式返回。然而,现在一切都设置为 PascalCase。
我尝试了以下设置以及 DefaultPropertyNamesContractResolver。:
services.AddMvc()
.AddNewtonsoftJson(options =>
{
// Return JSON responses in LowerCase?
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
// Resolve Looping navigation properties
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
这是控制器返回对象的方式。
// GET: api/Projects
[HttpGet]
public async Task<IEnumerable<Project>> GetProjects()
{
return await _context.GetAll();
}
奇怪的是,即使 Swagger 报告结果应该以驼峰形式返回,但 JSON 对象总是以 Pascal 大写。
任何想法我做错了什么?
【问题讨论】:
-
这似乎是
ASP.NET Core preview 4中的一个错误。您可以在这里提交问题:github.com/aspnet/AspNetCore -
谢谢你,@TanvirArjel。您是否确信在我提出错误报告之前我不会遗漏一些东西?
-
就我而言,ASP.NET Core 默认的序列化格式是 CamelCase。然后,即使您尝试使用
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();,但仍然是其 PasCal 案例。很奇怪。 -
是的,我不确定在这个阶段还有什么可以尝试的。谢谢,我会在 GitHub 页面上提出。
-
你试过了吗:
(options.SerializerSettings.ContractResolver as DefaultContractResolver).NamingStrategy = new CamelCaseNamingStrategy(true, false);