.net 使用C#解析swagger Json文档中的路径名和供应商扩展名

ht4b089n  于 2022-12-14  发布在  .NET
关注(0)|答案(1)|浏览(251)

嘿,我已经在路径(API操作)级别生成了一个带有供应商扩展的Swagger Json文档。现在我想在GET/POST等级别解析所有的路径名称(路由)沿着供应商扩展。在DotNet Core 6中有没有办法做到这一点?
我只知道hoe解析一个带有静态字段名的json文件。

2ledvvac

2ledvvac1#

多亏了@Helen,我才能以如下方式执行此任务:
首先,您应该安装openAPI.NETopenAPI.NET Reader nuget包。

StreamReader reader = File.OpenText("yourswaggerDocfilename");
var doc = reader.ReadToEnd();
var openApiReader = new OpenApiStringReader();
var docDeserialized = openApiReader.ReadFragment<IOpenApiAny>(text, OpenApiSpecVersion.OpenApi2_0, out var _) as Dictionary<string, IOpenApiAny>;
var paths = openApidoc["paths"] as Dictionary<string, IOpenApiAny>;
foreach(var pathItem in paths)
{
    var methods = pathItem.Value as Dictionary<string, IOpenApiAny>;
    foreach(var methodItem in methods)
    {
        var operationFields = methodItem.Value as Dictionary<string, IOpenApiAny>;
        if (operationFields.ContainsKey("x-vendorExtension"))
        {
           var moduleNameObject = operationFields["x-vendorExtension"] as OpenApiString;
           Console.WriteLine($"{pathItem.Key} : {moduleNameObject.Value}");
        }
    }
}

你可以用下面的代码来解析swagger Doc

var openApiReader = new OpenApiStringReader();
var docDeserialized = openApiReader.Read(doc,var out _);

但是当doc包含任何大于decimal.MaxValue的值时,这将抛出OverflowException,因为这个nugget库在内部使用decimal.Parse()来解析Doc中的数字。

相关问题