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

时间:2015-05-06 11:54:02

标签: arrays json dynamic-arrays swagger swagger-ui

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

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

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

1 个答案:

答案 0 :(得分: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;

...

        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));
        }

要解析的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)。

(还要感谢Denis,AutoRest的作者)