如何将 OpenApi.NET 中的 yaml 扩展解析为 .NET 类?
How to parse extensions of yaml in OpenApi.NET into .NET classes?
我需要为 OpenApi.NET 编写 ExtensionParsers,这样当我解析一个 yaml 文档时,扩展属性(名为 x-something 的属性)被解析成我对应的 C# classes写入而不是通常解析为 OpenApiObject。
因此,例如,当我使用 OpenApi.NET 解析以下 yaml 文档时:
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
参数对象被解析为 OpenApiParameter 类型的 C# 对象,名称为字符串类型,In 为 ParameterLocation 类型的枚举,架构为 OpenApiSchema 类型。
但是 x-setting 被解析为 OpenApiObject 类型的 C# 对象,名称被解析为 OpenApiString,数字被解析为 OpenApiInteger,设备被解析为 OpenApiString。
但因为我已经有了以下 c# class:
class Setting
{
string Name;
int Number;
Device Device;
}
我希望将其解析为设置类型的 C# 对象,名称为字符串,数字为整数,设备为设备类型的枚举。和参数对象一模一样
有人提到 here 这可以使用 属性 ExtensionParsers 来完成。但不清楚如何。
没有文档,代码注释中的解释也不是很好。那么有人可以帮忙吗?
非常感谢。
您需要提供一个扩展解析器来完成从 OpenApiObject 到本机 C# 的转换 class。例如
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
};
} } }
};
抱歉没有文档,不幸的是我没有时间。
我需要为 OpenApi.NET 编写 ExtensionParsers,这样当我解析一个 yaml 文档时,扩展属性(名为 x-something 的属性)被解析成我对应的 C# classes写入而不是通常解析为 OpenApiObject。
因此,例如,当我使用 OpenApi.NET 解析以下 yaml 文档时:
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
参数对象被解析为 OpenApiParameter 类型的 C# 对象,名称为字符串类型,In 为 ParameterLocation 类型的枚举,架构为 OpenApiSchema 类型。
但是 x-setting 被解析为 OpenApiObject 类型的 C# 对象,名称被解析为 OpenApiString,数字被解析为 OpenApiInteger,设备被解析为 OpenApiString。
但因为我已经有了以下 c# class:
class Setting
{
string Name;
int Number;
Device Device;
}
我希望将其解析为设置类型的 C# 对象,名称为字符串,数字为整数,设备为设备类型的枚举。和参数对象一模一样
有人提到 here 这可以使用 属性 ExtensionParsers 来完成。但不清楚如何。
没有文档,代码注释中的解释也不是很好。那么有人可以帮忙吗?
非常感谢。
您需要提供一个扩展解析器来完成从 OpenApiObject 到本机 C# 的转换 class。例如
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
};
} } }
};
抱歉没有文档,不幸的是我没有时间。