我有一个使用 Swagger 的 ASP.NET Core 2.2 Web API。
我最近从 Swashbuckle.AspNetCore 4.0 升级到 6.5。
除了一些小问题之外,我刚刚意识到,使用
System.Text.Json
(而不是 Newtonsoft.Json
)的新序列化现在生成 swagger.json
文件,其属性名称采用驼峰式大小写,以大写字母开头,而 Newtonsoft.Json
则以小写字母开头骆驼箱。
如何配置,让
swagger.json
看起来和升级前一样?
升级前:
"Geschlecht": {
"type": "object",
"properties": {
"key": {
"type": "integer",
"format": "int32"
},
"displayName": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false,
"description": ""
},
升级后:
"Geschlecht": {
"type": "object",
"properties": {
"Key": {
"type": "integer",
"format": "int32"
},
"DisplayName": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false,
"description": ""
},
当然,我可以使用属性
[JsonPropertyName("key")]
来装饰模型中的每个属性,但我宁愿全局配置它。
我尝试了不同的
ContractResolver
但没有成功:
services.AddMvc()
.AddJsonOptions(json => json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver());
我很怀疑
SerializerSettings
是 Newtonsoft 命名空间的一部分。我还没有找到 System.Text.Json
命名空间的等效设置。
您需要使用
System.Text.Json
JsonSerializerOptions
来代替 - 像这样:
services.AddMvc()
.AddJsonOptions(opt => opt.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase);
我不再有 .NET Core 2.2,所以我无法正确测试它 - 尝试一下!