So Ich denke, ich habe ein ähnliches Problem. Ich suche nach Swagger, um Enums zusammen mit dem Int -> String Mapping zu erzeugen. Die API muss den Int akzeptieren. Das Swagger-Ui zählt weniger, was ich wirklich will, ist Code-Generierung mit einem "echten" Enum auf der anderen Seite (Android-Apps mit Retrofit in diesem Fall).
Aus meiner Forschung scheint dies letztlich eine Grenze der OpenAPI-Spezifikation zu sein, die Swagger verwendet. Es ist nicht möglich, Namen und Nummern für Enums anzugeben.
Das beste Problem, das ich gefunden habe, ist https://github.com/OAI/OpenAPI-Specification/issues/681, die wie ein "vielleicht bald" aussieht, aber dann müsste Swagger aktualisiert werden, und in meinem Fall auch Swashbuckle.
Vorläufig bestand meine Problemumgehung darin, einen Dokumentfilter zu implementieren, der nach Enums sucht und die relevante Beschreibung mit dem Inhalt des Enums füllt.
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.DocumentFilter<SwaggerAddEnumDescriptions>();
//disable this
//c.DescribeAllEnumsAsStrings()
SwaggerAddEnumDescriptions.cs:
using System;
using System.Web.Http.Description;
using Swashbuckle.Swagger;
using System.Collections.Generic;
public class SwaggerAddEnumDescriptions : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
// add enum descriptions to result models
foreach (KeyValuePair<string, Schema> schemaDictionaryItem in swaggerDoc.definitions)
{
Schema schema = schemaDictionaryItem.Value;
foreach (KeyValuePair<string, Schema> propertyDictionaryItem in schema.properties)
{
Schema property = propertyDictionaryItem.Value;
IList<object> propertyEnums = [email protected];
if (propertyEnums != null && propertyEnums.Count > 0)
{
property.description += DescribeEnum(propertyEnums);
}
}
}
// add enum descriptions to input parameters
if (swaggerDoc.paths.Count > 0)
{
foreach (PathItem pathItem in swaggerDoc.paths.Values)
{
DescribeEnumParameters(pathItem.parameters);
// head, patch, options, delete left out
List<Operation> possibleParameterisedOperations = new List<Operation> { pathItem.get, pathItem.post, pathItem.put };
possibleParameterisedOperations.FindAll(x => x != null).ForEach(x => DescribeEnumParameters(x.parameters));
}
}
}
private void DescribeEnumParameters(IList<Parameter> parameters)
{
if (parameters != null)
{
foreach (Parameter param in parameters)
{
IList<object> paramEnums = [email protected];
if (paramEnums != null && paramEnums.Count > 0)
{
param.description += DescribeEnum(paramEnums);
}
}
}
}
private string DescribeEnum(IList<object> enums)
{
List<string> enumDescriptions = new List<string>();
foreach (object enumOption in enums)
{
enumDescriptions.Add(string.Format("{0} = {1}", (int)enumOption, Enum.GetName(enumOption.GetType(), enumOption)));
}
return string.Join(", ", enumDescriptions.ToArray());
}
}
Daraus ergibt sich in etwa wie folgt auf Ihre Prahlerei-ui so zumindest kann man "sehen, was du tust": 
Do Sie möchten, dass das Schema den Wert als String beschreibt und dann eine ganze Zahl an den Server schreibt? JSON.net wird beide Werte gut behandeln, also ist die Integer-Version eine eindeutige Anforderung? Ich glaube nicht, dass Swagger einen Enum-Typ sowohl mit dem String- als auch dem Integer-Wert unterstützt. – Mig
Ihr erwartetes Verhalten ist unklar. Können Sie besser erklären, was Swagger UI anzeigen soll und was Sie mit Beispielen an Ihre Web-API senden möchten? –
Mig genau das, was ich wollte. Wenn es an meinen Server gesendet wird, weil die Validierung der Ganzzahl fehlschlägt, liegt das Problem möglicherweise in meinem Code. Aber du sagst, dass es in meiner Datenbank als Integer gespeichert wird? Oder wird es als Integer gespeichert? Wird eine Verschwendung sein, es als Zeichenkette auf meiner Datenbank zu speichern –