我需要为OpenApi.NET编写ExtensionParsers,以便在解析yaml文档时,扩展属性(名为x-something的属性)被解析为我编写的相应C#类,而不是通常解析为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参数object被解析为OpenApiParameter类型的C#对象,name是string类型,In是ParameterLocation类型的枚举,schema是OpenApiSchema类型。
但是x-setting被解析为OpenApiObject类型的C#对象,name被解析为OpenApiString,number被解析为OpenApiInteger,device被解析为OpenApiString。
但是因为我已经有了下面的c#类:
class Setting
{
string Name;
int Number;
Device Device;
}我希望将其解析为类型为Setting的C#对象,名称为字符串,数字为整数,设备为设备类型的枚举。与参数对象完全相同。
这里提到的here可以使用属性ExtensionParsers来完成此操作。但目前还不清楚是如何做到的。
没有文档,代码中注释的解释也不是很好。所以有人能帮上忙吗?
非常感谢。
发布于 2020-01-29 09:51:30
您需要提供一个扩展解析器来完成从OpenApiObject到本机C#类的转换。例如:
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://stackoverflow.com/questions/59923510
复制相似问题