2017-09-16 2 views
0

Ich verwende NSwag SwaggerToCSharpClientGenerator, um die Anforderungs- und Antwortklassen und Enums zu generieren.NSwag Generieren von doppelten Typen

Ich habe einige Web-API-Methoden, die die gleiche Aufzählung als ein Argument oder als Teil des Anfrageobjekts teilen. Wenn ich die NSwag-API ausführe, wird dieselbe Enum-Definition mehrere Male generiert, aber benannt als Enum1, Enum2, Enum3, ResponseClassEnum.

Kann ich NSwag (oder Swashbuckle) so konfigurieren, dass nur eine Enumeration generiert wird?

Mein NSwag Code wie folgt aussieht:

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); 

Ich habe hier verschleierten swagger.json put - https://pastebin.com/hT5ySZub

Produziert Ausgabe von verschleierten swagger.json hier ist - https://pastebin.com/e0AYJWer In der Ausgabe der type DupEnum ist in Typen definiert: DupEnum, DupEnum2, DupEnum3 und TypeBDupEnum.

Antwort

0

Wahrscheinlich generieren Sie die Swagger-Spezifikation mit swashbuckle: Das Problem ist, dass Swashbuckle nicht auf Enums verweist, sondern sie wiederholt - deshalb werden sie mehrfach generiert (siehe: https://github.com/RSuter/NJsonSchema/issues/17).

Wenn die Spezifikation mit NSwag generiert wird, werden die Enums mit einer speziellen Eigenschaft (x-schema) referenziert, und der generierte Code enthält keine Duplikate.

Das grundlegende Problem ist die Prahlerei spec - es ist nicht Aufzählungen in primitiven Parametern zu verweisen erlaubt ... und im nicht einmal sicher, ob dies 3.

in OpenAPI wird behoben
Verwandte Themen