Полиморфизм типов, которые я не контролирую с помощью NSwag/NJsonSchema
Этот вопрос и ответ демонстрируют наследование с JsonInheritanceConverter
,
Однако что, если я не владею (или не могу изменить) типами в соответствующей иерархии наследования?
Учти это:
// LibAssembly (cannot change)
[DataContract]
[KnownType(nameof(CommonThingBase.GetKnownTypes))]
public abstract class CommonThingBase
{
public static IEnumerable<Type> GetKnownTypes() { /* works as expected */ }
}
[DataContract]
public class ACommonThing : CommonThingBase { }
[DataContract]
public class BCommonThing : CommonThingBase { }
И это:
// ApiAssembly (mine, references LibAssembly)
public class ViewModelThing
{
public CommonThingBase CommonThing { get; }
}
public class CommonThingController : ApiController
{
[HttpGet]
[Route("/CommonThing")]
[ResponseType(typeof(ViewModelThing))]
public IHttpActionResult GetCommonThing() { /* works as expected */ }
}
Предполагая, что я не владею (или не могу изменить) CommonThingBase
и это производные типы в LibAssembly
Как я могу создать схему Swagger, которая включает в себя производные типы CommonThingBase
?
С помощью WebApiToSwaggerGenerator
из коробки на CommonThingController
не создает схему, которая включает в себя ACommonThing
, BCommonThing
или любой другой производный тип.