我正在尝试为我的Web API生成Swagger JSON,该Web API是使用Swashbuckle在C#中开发的。在某些情况下,我的返回类型的一个对象属性可以基于包含对象(鉴别符)中的字符串/枚举值是多态的。当我浏览了swagger文档和其他在线帮助时,发现我们可以基于同一对象中的属性但不包含对象来支持多态。以下是我的api响应示例。 OpenAPI规范是否支持此方案?我读到了Swagger 3.0中引入的OneOf属性,想知道这是我应该使用的解决方案吗?如果是这样,我们可以将OneOf与鉴别符一起使用吗?
在下面的示例代码中,基于枚举DeviceType,DeviceProperty可以是ABCDeviceProperties或XYZDeviceProperties。是否可以为返回或接受“设备”的api生成摇摇欲坠?
public enum DeviceType {ABC, XYZ }
public class Device
{
public string Id { get; set; }
public string Name { get; set; }
public string SerialNumber { get; set; }
public DeviceType Type { get; set; }
public DeviceProperties Properties { get; set; }
}
public class DeviceProperties
{
public string MemorySize { get; set; }
}
public class ABCDeviceProperties : DeviceProperties
{
public string Abc { get; set; }
}
public class XYZDeviceProperties : DeviceProperties
{
public string Xyz { get; set; }
}