Сериализация базовых и подтипов в .NET Core 3.1 API с использованием сгенерированного клиента C #

#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 #? Кажется, я не могу полностью понять это и заставить его работать…