gpt4 book ai didi

c# - 使 NSwag 生成的客户端中的属性可为空

转载 作者:行者123 更新时间:2023-12-02 04:04:42 25 4
gpt4 key购买 nike

我从供应商处获得了 (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 客户端仍然可以使用此功能?理想情况下,我将使所有字符串属性可为空。

最佳答案

我在第三方 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);

关于c# - 使 NSwag 生成的客户端中的属性可为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57286887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com