And*_*nov 7 c# json.net swagger nswag
鉴于:我在更改方面影响有限的 api,构建在 net core 2.2 上。使用标准 netCore 招摇。某些 DTO 类中的字段标记为
[System.ComponentModel.DataAnnotations.Required]但由于某些原因(这也是可以讨论的),某些方法返回此类的对象,在此字段中为空值。注释导致
"required": [
"given", - this field for example
"family",
"email",
"postCode"
],
"type": "object",
...
Run Code Online (Sandbox Code Playgroud)
在 swagger 规范中,然后导致
[Newtonsoft.Json.JsonProperty("given", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
Run Code Online (Sandbox Code Playgroud)
在 c# 生成的代码中(我使用的是具有非常标准设置的 nswag studio 和 c# 客户端)。然后,当我尝试使用生成的 c# 客户端从 api 获取此类对象的列表时,如果其中一些属性为 null,它显然会引发 newtonsoft 反序列化异常。那么我们如何处理呢?我想到了客户端和服务器端的解决方案:
1) 在服务器上,我们可以配置为不公开有关 swagger 规范所需的信息。
2) 在客户端上,我们可以配置将该 Required 块转换为 Required = Newtonsoft.Json.Required.Default 的行为
3) 忘记所有这些并坚持这样 api 将不会返回具有空值的对象,这些属性市场需要。