首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swashbuckle生成多态字段

Swashbuckle生成多态字段
EN

Stack Overflow用户
提问于 2021-05-24 23:10:20
回答 1查看 33关注 0票数 0

我有一个基类,它有两个派生类,并希望将输出的一个字段映射到“one of”语句。

代码语言:javascript
复制
public class ClothingCollection
    {
        public string Name { get; set; }
        public string Id { get; set; }
    }
    public abstract class ClothingCollection<T> : ClothingCollection
    {
        public abstract string Type { get; }
        public abstract List<T> Stuff { get; }
    }
    public class PantsCollection : ClothingCollection<PantsModel>
    {
        public override string Type { get; } = "PANTS";
        public override List<PantsModel> Stuff { get; }
    }
    public class ShirtCollection : BaseItem<ShirtModel>
    {
        public override string Type { get; } = "SHIRT";
        public List<BarChartData> Data { get; }
    }
    public class PantsModel
    {
        public bool IsJeans { get; set; }
        public string owner { get; set; }
    }

    public class ShirtModel
    {
        public string Brand { get; set; }
        public int Quantity { get; set; }
    }

并将控制器响应设置为...

代码语言:javascript
复制
[ProducesResponseType(typeof(List<ClothingCollection>), 200)]
[HttpGet("HelloWorld")]
public IActionResult HelloWorld()
{
....
}

现在我希望得到的swagger文档列表看起来有点像下面这样(如果可能的话)

代码语言:javascript
复制
{
    "Name": "string",
    "Id": "string",
    "type": "string",
    "Stuff":[
              anyof -> PantsCollection,
                       ShirtCollection
    ]
}
EN

回答 1

Stack Overflow用户

发布于 2021-05-24 23:25:48

在几个固定类型中只有一个值的概念被称为tagged union,区分并集,或者有时称为任一单数。

您可以创建一个具有衬衫或裤子的类:

代码语言:javascript
复制
    public class ShirtOrPants
    {
        public ShirtCollection Shirts { get; }
        public PantsCollection Pants { get; }

        public ShirtOrPants(ShirtCollection shirts, PantsCollection pants)
        {
            Shirts = shirts;
            Pants = pants;
            if ((shirts == null) == (pants == null))
            {
                throw new InvalidOperationException("Must have shirts OR pants!");
            }
        }
    }

据我所知,在c#或任何比较流行的序列化语言中都没有对标记联合的内置支持,因此您需要一些定制的解决方案。您通常会添加各种方法来处理衬衫或裤子,这取决于哪一种方法具有值。

generic implementations available,但如果目标是提供可读的API定义,它们可能没有多大帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67674517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档