解析 Swagger JSON 数据并将其存储在 .net 类中

Vis*_*hna 5 arrays json dynamic-arrays swagger swagger-ui

我想将从 {service}/swagger/docs/v1 获取的 JSON 中的 Swagger 数据解析为动态生成的 .NET 类。

我面临的问题是不同的 API 可以有不同数量的参数和操作。如何动态解析不同服务的 Swagger JSON 数据?

我的最终结果应该是所有 API 的列表,以及它在变量中的操作,我可以轻松地执行搜索。

Pro*_*rof 0

您找到这个问题的答案了吗?今天我想做同样的事情,所以我使用了 MSFT 的 AutoRest 开源项目,https://github.com/Azure/autorest。虽然它看起来像是为生成客户端代码(用于使用 swagger 文档记录的 API 的代码)而设计的,但在生成此代码的过程中的某个时刻,它必须完全按照您在问题中要求的方式进行操作 - 解析 Swagger 文件并了解 API 支持的操作、输入和输出。

事实上,我们可以获取此信息 - AutoRest 公开公开此信息。

因此使用nuget来安装AutoRest。然后添加对 AutoRest.core 和 AutoRest.Model.Swagger 的引用。到目前为止,我只是简单地去了:

using Microsoft.Rest.Generator;
using Microsoft.Rest.Generator.Utilities;
using System.IO;
Run Code Online (Sandbox Code Playgroud)

...

        var settings = new Settings();
        settings.Modeler = "Swagger";

        var mfs = new MemoryFileSystem();
        mfs.WriteFile("AutoRest.json", File.ReadAllText("AutoRest.json"));
        mfs.WriteFile("Swagger.json", File.ReadAllText("Swagger.json"));
        settings.FileSystem = mfs;
        var b = System.IO.File.Exists("AutoRest.json");

        settings.Input = "Swagger.json";

        Modeler modeler = Microsoft.Rest.Generator.Extensibility.ExtensionsLoader.GetModeler(settings);
        Microsoft.Rest.Generator.ClientModel.ServiceClient serviceClient;
        try
        {
            serviceClient = modeler.Build();
        }
        catch (Exception exception)
        {
            throw new Exception(String.Format("Something nasty hit the fan: {0}", exception.Message));
        }
Run Code Online (Sandbox Code Playgroud)

您要解析的 swagger 文档称为 Swagger.json,位于您的 bin 目录中。您可以从其 GitHub ( https://github.com/Azure/autorest/tree/master/AutoRest/AutoRest.Core.Tests/Resource )获取 AutoRest.json 文件。我不是 100% 确定它是如何使用的,但似乎需要告知该工具支持什么。这两个 JSON 文件都需要位于您的 bin 中。

serviceClient 对象就是您想要的。它将包含有关方法、模型类型、方法组的信息

让我知道这个是否奏效。你可以用他们的资源文件试试。我在玩的时候使用了他们的ExtensionLoaderTests作为参考(https://github.com/Azure/autorest/blob/master/AutoRest/AutoRest.Core.Tests/ExtensionsLoaderTests.cs)。

(也感谢AutoRest的作者Denis)