Tak Myślę, że mam podobny problem. Szukam swagger do generowania wyliczeń wraz z mapowaniem int -> string. Interfejs API musi akceptować int. Swagger-ui ma mniejsze znaczenie, czego naprawdę potrzebuję, to generowanie kodu z "prawdziwym" wyliczeniem po drugiej stronie (aplikacje z Androidem używające w tym przypadku modernizacji).
Tak więc z moich badań wynika, że ostatecznie jest to limit specyfikacji OpenAPI, której używa Swagger. Nie można podać nazw i liczb dla wyliczeń.
Najlepszym problemem, jaki znalazłem, jest https://github.com/OAI/OpenAPI-Specification/issues/681, który wygląda jak "może wkrótce", ale wtedy Swagger musiał zostać zaktualizowany, aw moim przypadku także Swashbuckle.
Na razie moje obejście polegało na wdrożeniu filtru dokumentów, który wyszukuje wyliczenia i wypełnia odpowiedni opis treścią wyliczenia.
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());
}
}
Powoduje to coś jak następuje na Swagger-ui tak przynajmniej można "zobaczyć, co robisz": 
Do chcesz, aby schemat opisał wartość jako ciąg, a następnie opublikował liczbę całkowitą na serwerze? JSON.net poradzi sobie z obydwoma wartościami, więc czy jest to tylko wersja całkowita? Nie sądzę, że Swagger obsługuje typ wyliczeniowy z wartością ciągu i liczby całkowitej. – Mig
Twoje oczekiwane zachowanie jest niejasne, czy możesz lepiej wyjaśnić, co chcesz, aby Swagger UI wyświetlał i co chcesz POST/PUT do swojego Web API z przykładami? –
Mig to dokładnie to, czego chciałem. Kiedy jest on wysyłany do mojego serwera, ponieważ walidacja nie powiedzie się, być może problem jest w moim kodzie. Ale mówisz, że w mojej bazie danych będzie ona zapisana jako liczba całkowita? Czy będzie zapisany jako liczba całkowita? Będzie marnotrawstwem, aby zapisać go jako ciąg w mojej bazie danych –