2017-09-16 6 views
0

NSwag SwaggerToCSharpClientGeneratorを使用して要求クラスと応答クラスと列挙型を生成しています。NSwagは重複するタイプを生成します

私は引数として同じenumを共有するWeb APIメソッドをいくつか持っています。 NSwag APIを実行すると、複数の同じ列挙型定義が生成されますが、Enum1、Enum2、Enum3、ResponseClassEnumという名前が付けられます。

NSwag(またはSwashbuckle)を構成して1つの列挙だけが生成されるように設定できますか?

マイ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を入れている - 難読化swagger.jsonから https://pastebin.com/hT5ySZub

生成される出力はここにある - 出力で https://pastebin.com/e0AYJWer を、型DupEnumは、DupEnum、DupEnum2、DupEnum3、およびTypeBDupEnumの型で定義されています。

答えて

0

スワッシュバックルでスワッガーの仕様を生成している可能性があります。スワッシュバクルは列挙型を参照しませんが繰り返します。これが複数回生成される理由です(https://github.com/RSuter/NJsonSchema/issues/17参照)。

仕様がNSwagで生成された場合、enumは特殊なプロパティ(x-schema)で参照され、生成されたコードには重複が含まれません。

基本的な問題はSwagger仕様です。プリミティブパラメータでenumを参照することはできません。これがOpenAPI 3で修正されているかどうかはわかりません。

関連する問題