首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将OpenApi.NET中的yaml扩展解析成.NET类?

如何将OpenApi.NET中的yaml扩展解析成.NET类?
EN

Stack Overflow用户
提问于 2020-01-27 06:55:43
回答 1查看 1.2K关注 0票数 0

我需要为OpenApi.NET编写ExtensionParsers,以便在解析yaml文档时,扩展属性(名为x-something的属性)被解析为我编写的相应C#类,而不是通常解析为OpenApiObject。

例如,当我使用OpenApi.NET解析以下yaml文档时:

代码语言:javascript
复制
openapi: 3.0.2
info:
  title: 'My interface'
  version: '1.0'
servers:
  - url: https://www.example.com
paths:
  "/student":
    get:
      parameters:
      - name: school
        in: query
        schema:
          type: string
      x-setting:
        name: 'Hello world'
        number: 312
        device: mobile
      responses:
        "200":
          description: Successful
          headers:
            Content-Type:
              schema:
                type: string
          content:
            application/json:
              schema:
                type: string

参数object被解析为OpenApiParameter类型的C#对象,name是string类型,In是ParameterLocation类型的枚举,schema是OpenApiSchema类型。

但是x-setting被解析为OpenApiObject类型的C#对象,name被解析为OpenApiString,number被解析为OpenApiInteger,device被解析为OpenApiString。

但是因为我已经有了下面的c#类:

代码语言:javascript
复制
class Setting
    {
        string Name;
        int Number;
        Device Device;
    }

我希望将其解析为类型为Setting的C#对象,名称为字符串,数字为整数,设备为设备类型的枚举。与参数对象完全相同。

这里提到的here可以使用属性ExtensionParsers来完成此操作。但目前还不清楚是如何做到的。

没有文档,代码中注释的解释也不是很好。所以有人能帮上忙吗?

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-29 09:51:30

您需要提供一个扩展解析器来完成从OpenApiObject到本机C#类的转换。例如:

代码语言:javascript
复制
 var settings = new OpenApiReaderSettings()
            {
                ExtensionParsers = { { "x-foo", (a,v) => {
                        var fooNode = (OpenApiObject)a;
                        return new FooExtension() {
                              Bar = (fooNode["bar"] as OpenApiString)?.Value,
                              Baz = (fooNode["baz"] as OpenApiString)?.Value
                        };
                } } }
            };

https://github.com/microsoft/OpenAPI.NET/blob/3aeeef600d19e4ecfdf0d116725658b1c496eba0/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs#L29

很抱歉没有文档,很遗憾我没有时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59923510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档