2017-09-16 64 views
0

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

我有一些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类型中定义。

回答

0

您可能正在使用swashbuckle生成swagger规范:问题是Swashbuckle没有引用枚举但重复它们 - 这就是为什么它们会多次生成(请参阅:https://github.com/RSuter/NJsonSchema/issues/17)。

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

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