2017-09-16 117 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中修復。