c# - .Net Core 3.0.100-preview6 - API Json 响应总是驼峰式,但我的课程不是
问题描述
我有一个 .net core 3.0 preview 6 MVC 应用程序和 API。在 API 中,我正在使用第三方类库(我无法更改),它将类属性定义为 Pascal 大小写与 JsonProperty、PropertyName 蛇形大小写,例如...
public class Company
{
[JsonProperty(PropertyName = "company_name")]
public string CompanyName { get; set; }
more properties ….
}
问题是,当我通过 api 提供这些时,它们以 Camel 案例(.net core 3 的默认值)到达 MVC 应用程序......然后无法反序列化回类模型。
无论我尝试什么,API 总是会生成驼峰式 JSon,例如。上面的属性将被称为 companyName。
我试过了,
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver { NamingStrategy = new CamelCaseNamingStrategy { OverrideSpecifiedNames = true } };
options.SerializerSettings.ContractResolver = new DefaultContractResolver { NamingStrategy = new DefaultNamingStrategy { OverrideSpecifiedNames = true } };
我已经在骆驼和默认 ContractResolver 上尝试了 NamingStrategy = null。还尝试将 NamingStrategy 设置为 Snake
但是没有任何改变输出的Json,它总是驼峰式的。
通过在 MVC 应用程序中使用 ReadAsStringAsync,我可以看到生成的字符串是驼峰式大小写的……当我使用 JsonConvert.DeserializeObject 时,属性始终为空,因为名称或 Json PropertyName 都不匹配结果字符串中的名称。
这是 .net 核心预览中的错误还是缺少其他内容?
感谢Mustafa,您建议的重复项与我已经尝试过的解决方案有点相同,即将ContractResolver / NamingStrategy的设置更改为不同的值......但是,我的问题是没有出现任何建议的解决方案要对 API 响应产生任何影响,它总是以 camelCased 形式返回。
有趣的是,当我将 NamingStrategy 更改为 Snake 时,Swagger 将模式显示为 set(即蛇)但实际输出仍然是 camelCased !!!
此外,我无法控制基类,因此我无法更改我尝试传输的类的名称/json 属性。
解决方案
Microsoft.AspNetCore.Mvc.NewtonsoftJson
不会出现默认值。尝试将此 nuget 包手动安装到您的服务项目中。这对我有用。
推荐阅读
- java - java - 如何在java中随机分配我们分配到二维数组中的每个数字?
- python - Python3.7:加载共享库时出错:libpython3.7m.so.1.0
- spring - @PersistenceUnit 和 @PersistenceContext 可以在同一个应用程序中使用吗
- javascript - 如果在对象中找到值,则返回键
- javascript - Zapier Javascript代码来隔离日期时间字符串的一部分
- excel - 如何从 Access 数据库中按 Excel 工作簿的列拆分数据
- scala - Spark SQL - Delay between job (Broadcast DataFrame)
- jquery - How to make the text box value stay when clicking on another box?
- excel - Extract the initials of first name and last name as well as number to form an ID number
- c# - How to solve Asp.Net 3.0 Migrating DB issue from SQLite to MySQL?