首页 > 解决方案 > .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 属性。

标签: c#.net-corejson.netjson-deserializationjson-serialization

解决方案


Microsoft.AspNetCore.Mvc.NewtonsoftJson

不会出现默认值。尝试将此 nuget 包手动安装到您的服务项目中。这对我有用。


推荐阅读