【问题标题】:Make properties in NSwag generated client nullable使 NSwag 生成的客户端中的属性可以为空
【发布时间】:2019-12-08 17:52:12
【问题描述】:

我在 (OpenApi 3.0.1) 中从供应商处获得此对象规范:

"ExampleTO" : {
  "codeValidFrom" : {
    "type" : "string",
    "format" : "date"
  }
}

NSwag 在 C# 客户端中生成此属性(我认为是正确的):

[Newtonsoft.Json.JsonProperty("codeValidFrom",
 Required = Newtonsoft.Json.Required.DisallowNull,
 NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
[Newtonsoft.Json.JsonConverter(typeof(DateFormatConverter))]
public System.DateTimeOffset CodeValidFrom { get; set; }

问题:“codeValidFrom”中有空值。我认为规范应该是这样的:

"ExampleTO" : {
  "codeValidFrom" : {
    "type" : "string",
    "format" : "date",
    "nullable: "true"
  }
}

供应商不想做这个添加,声称架构是生成的并且不能轻易更改。

有没有办法让 NSwag 客户端仍然可以正常工作?理想情况下,我会让所有字符串属性都可以为空。

【问题讨论】:

    标签: c# nswag


    【解决方案1】:

    我在第三方 API 中遇到了类似的问题,该问题在于其属性的可空性。我正在使用我自己编写的客户端生成器,所以我给它一个选项来使用模式访问者(在issue #1814 中讨论作为不同问题的解决方案)来清除 Swagger 文档的“必需”属性集合,从而使所有属性默认为可为空。您可能可以通过在解析 JSON 之前对其进行操作来实现相同的目的。

    class RequiredVisitor : JsonSchemaVisitorBase
    {
        protected override Task<JsonSchema4> VisitSchemaAsync(JsonSchema4 schema, string path, string typeNameHint)
        {
            schema.RequiredProperties.Clear();
            return Task.FromResult(schema);
        }
    }
    

    像这样使用它(我的代码不是一字不差,未经测试):

    var doc = await SwaggerDocument.FromJsonAsync(json);
    await new RequiredVisitor().VisitAsync(doc);
    

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 2018-11-09
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多