Как создать swagger для моего API, где одно свойство возвращаемого типа может быть полиморфным? - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь сгенерировать Swagger JSON для моего веб-API, который разработан в c # с использованием Swashbuckle.Есть случай, когда одно свойство объекта моего возвращаемого типа может быть полиморфным на основе значения строки / перечисления в содержащем объект (дискриминатор).Когда я просмотрел документацию и другие онлайн-справки, выяснилось, что мы можем поддерживать полиморфизм, основанный на свойстве одного и того же объекта, но не содержащий объекта.Ниже приведен пример моего ответа API.Поддерживается ли этот сценарий в спецификации OpenAPI?Я прочитал о свойстве OneOf, которое представлено в Swagger 3.0, и мне интересно, это решение, которое я должен использовать?если да, можем ли мы использовать OneOf с дискриминатором?

В приведенном ниже примере кода, основанном на перечислении DeviceType, DeviceProperties могут быть либо ABCDeviceProperties, либо XYZDeviceProperties.Можно ли создать swagger для 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; }
    }
...