#asp.net-core #swagger #swashbuckle.aspnetcore
#asp.net-core #swagger #swashbuckle.aspnetcore
Вопрос:
Мы хотели бы иметь базовый тип, например Input
, со Value
свойством, а затем иметь TextInput
, который дополнительно имеет Placeholder
свойство. Следующим подтипом может быть NumberInput
, и он может иметь MaxLength
свойство, например… Чтобы настроить наследование с помощью Swagger и использовать его также с помощью сгенерированного клиента, мы сделали это после services.AddControllers.()
:
.AddNewtonsoftJson(options =>
options.SerializerSettings.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All)
Позже:
services.AddSwaggerGen(
options =>
{
options.IncludeXmlComments(XmlCommentsFilePath);
options.EnableAnnotations(true);
options.UseAllOfForInheritance();
options.UseOneOfForPolymorphism();
//even tried that
options.SelectDiscriminatorNameUsing((baseType) => "Input");
options.SelectDiscriminatorValueUsing((subType) => subType.Name);
На самих моделях прямо сейчас нет аннотаций… Пробовал использовать это в определении базового Input
класса:
[SwaggerSubTypes(new Type[] { typeof(TextInput), typeof(NumberInput)}, Discriminator="Type")]
Но, честно говоря, я не уверен, что делать с дискриминатором… он автоматически добавляет «Тип» в качестве свойства.
Вызывая API, ответ в порядке, но проблема в том, что сгенерированный клиент C # не может десериализовать … возвращаемые им свойства имеют OneOf
префикс к их имени, и они не имеют значений…схема выглядит хорошо…
Кто-нибудь понимает, как заставить простую реализацию базового и подтипа работать с API и сгенерированным клиентом C #? Кажется, я не могу полностью понять это и заставить его работать…