2017-09-04 24 views
2

我有一个多态模型来处理多态模型:C#如何使用NSwag

public class CreateOrderRequest 
{ 
    public List<CreateOrderItem> OrderItems { get; set; } 
} 

/// <summary> 
/// Identifies a new item within an order 
/// </summary>  
[JsonConverter(typeof(CreateOrderLineJsonConvertor))] 
[KnownType("GetKnownTypes")] 
public class CreateOrderItem 
{ 
    public string OrderContext { get; set; } 
    public string OrderItemType { get; set; } 

    public static Type[] GetKnownTypes() 
    { 
     return new[] 
     { 
      typeof(OrderItemType1), typeof(OrderItemType2) 
     }; 
    } 
} 

public class OrderItemType1: CreateOrderItem 
{ 
    public string Type1Prop {get;set;} 
} 

public class OrderItemType2: CreateOrderItem 
{ 
    public string Type2Prop {get;set;} 
} 

使用NSwag(NSwag.AspNetCore)根据文档,我希望这是足以使文档指出/载顺序项目类型?但是,没有...

enter image description here

我已完全错过了什么NSwag需要点?我有OrderItemType属性。我需要得到一个鉴别参与者吗?这在哪里记录?

TIA

回答

1

你在基类需要

[JsonConverter(typeof(JsonInheritanceConverter), "discriminator")] 

从而增加了鉴别。

请参阅https://github.com/RSuter/NJsonSchema/wiki/Inheritance

+1

谢谢里科。可能是愚蠢的问题。这是一个aspnet核心Web API应用程序。我是否正确地阅读链接的文档,该属性在生成的客户端中启用了正确的流氓行为和反序列化...但我无法删除服务器反序列化请求所需的现有基类属性? (Sry,无法从我当前的位置进行测试) – 6footunder

+1

NSwag(或NJS)查找此转换器(名称),并且只有在其可用的正确模式生成时才会查找。此外,转换器将鉴别器属性添加到json,以便反序列化正常工作... –

+0

而btw:服务的swagger ui 2.x不支持鉴别器,也许你必须使用自己的新版本或redoc –