asp.net-core - 使用生成的 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# 客户端来简单实现基类和子类型?我似乎无法完全理解这一点并使其发挥作用......
解决方案
推荐阅读
- java - 在带有字符串数组的 if else 语句中打印出多行。(爪哇)
- java - Firebase 实时数据库,一次查询加载多个用户
- php - 使用具有绝对位置的 div 中的图像滑动轮播
- html - 如何在当前引导模板中正确居中背景图像
- javascript - 为什么我的正则表达式在客户端上工作而在服务器上失败?
- python - 如果它们在不同的行上,我如何读取 Python 中的数字列表?
- python - 一行中的两个 for 循环
- php - img-tag 中的全屏图像宽度
- docker - 如何从 docker build 中取出工件?
- android - ListAdapter.submitList() 忽略新的列表顺序