我想将从{service} / swagger / docs / v1获得的JSON中的Swagger数据解析为动态生成的.NET类。
我面临的问题是不同的API可以有不同数量的参数和操作。如何为不同的服务动态解析Swagger JSON数据?
我的最终结果应该是所有API的列表及其在变量中的操作,我可以在其中轻松执行搜索。
答案 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的作者)