【发布时间】:2019-07-24 12:13:10
【问题描述】:
我有一个 .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 响应有任何影响,它总是以驼峰形式返回。
有趣的是,当我将 NamingStrategy 更改为 Snake 时,Swagger 将架构显示为已设置(即蛇),但实际输出仍然是 camelCased!!!
另外,我无法控制基类,因此我无法更改我尝试传输的类的名称/json 属性。
【问题讨论】:
标签: c# .net-core json.net json-deserialization json-serialization