NSwag生成重复类型

时间:2017-09-16 18:42:07

标签: nswag

我正在使用NSwag SwaggerToCSharpClientGenerator来生成请求和响应类和枚举。

我有一些Web API方法与参数或作为请求对象的一部分共享相同的枚举。当我运行NSwag API时,它会多次生成相同的枚举定义,但命名为Enum1,Enum2,Enum3,ResponseClassEnum。

我可以配置NSwag(或Swashbuckle)以便只生成一个枚举吗?

我的NSwag代码如下:

   var document = SwaggerDocument.FromUrlAsync(
      "http://localhost:5003/swagger/v1/swagger.json").Result;

   var settings = new SwaggerToCSharpClientGeneratorSettings();
   settings.GenerateClientClasses = false;
   settings.CSharpGeneratorSettings.Namespace = "My.Interface";
   settings.CSharpGeneratorSettings.ArrayType = "List";
   settings.AdditionalNamespaceUsages = new string[] { "System.Collections.Generic" };
   settings.GenerateExceptionClasses = false;

   var generator = new SwaggerToCSharpClientGenerator(document, settings);

   var code = generator.GenerateFile();
   File.WriteAllText("Swagger.MyApi.cs", code);

我把模糊的swagger.json放在这里 - https://pastebin.com/hT5ySZub

来自混淆的swagger.json的产生输出在这里 - https://pastebin.com/e0AYJWer 在输出中,DupEnum类型的类型定义为:DupEnum,DupEnum2,DupEnum3和TypeBDupEnum。

1 个答案:

答案 0 :(得分:2)

你可能正在使用swashbuckle生成swagger规范:问题是Swashbuckle不引用枚举但重复它们 - 这就是为什么它们被多次生成的原因(参见:https://github.com/RSuter/NJsonSchema/issues/17)。

如果使用NSwag生成规范,则使用特殊属性(x-schema)引用枚举,并且生成的代码不包含任何重复项。

基本问题是Swagger规范 - 它不允许在原始参数中引用枚举......我甚至不确定这是否已在OpenAPI 3中修复。