你有找到这个问题的答案吗?今天我也想做同样的事情,所以我使用了微软的开源项目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文件。我不确定它的使用方式,但似乎需要用它来告知工具支持什么。这两个JSON文件都需要在您的bin目录中。
serviceClient对象是您想要的。它将包含有关方法、模型类型和方法组的信息。
如果这样行得通,请告诉我。您可以尝试使用他们的资源文件。当我在玩耍时,我使用了他们的ExtensionLoaderTests作为参考(https://github.com/Azure/autorest/blob/master/AutoRest/AutoRest.Core.Tests/ExtensionsLoaderTests.cs)。
(同时感谢AutoRest的作者Denis)