首页 > 解决方案 > 使用生成的 C# 客户端在 .NET Core 3.1 API 中进行基本类型和子类型序列化

问题描述

我们希望有一个基本类型,比如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# 客户端来简单实现基类和子类型?我似乎无法完全理解这一点并使其发挥作用......

标签: asp.net-coreswaggerswashbuckle.aspnetcore

解决方案


推荐阅读