2017-08-07 75 views
1

我们使用swagger/nswag来记录webapi项目。Swagger/NSwag:重新定义参数类型

作为ActionMethods的BodyParameters,我们使用带有后缀Command的类,它包含例如创建一个Domain-Object保存在数据库中。

命令类看起来是这样的:

public class CreateChildCommand { 
    public Parent Parent { get; set; } 
    public int Position { get; set; } 
} 

虽然位置是一个简单的INT,家长是域级坚持在数据库中。可它在某种程度上是这样的:

public class Parent { 

    public Guid Id { get; set; } 
    public string Name { get; set; } 
    ... 
} 

可以从数据库中通过其ID加载,所以我们只是传递id作为参数在JSON的命令参数是这样的:

{ 
    "Position": 3, 
    "Parent": "41E71207-7F1E-4895-8BCC-14E1293A7907" 
} 

当对Json进行反序列化时,父节点通过它的Id通过Dao加载。 现在的问题是,那招摇/ nswag不明白,“魔术”,并显示该参数是这样的方法:

{ 
    "Position": number, 
    "Parent": { 
     Id: "Guid", 
     "Name": "string", 
     ... 
    } 
} 

有没有办法告诉招摇更换类型为父母做它看起来像这样:

{ 
    "Position": "int", 
    "Parent": "Guid" 
} 

回答

2

可以使用JsonSchemaAttribute属性来重写复杂属性的架构类型:

public class CreateChildCommand { 
    [JsonSchema(JsonObjectType.String, Format = "guid")] 
    public Parent Parent { get; set; } 

    public int Position { get; set; } 
} 

属性在NJsonSchema库中实现:https://www.nuget.org/packages/NJsonSchema/

另一种选择是使用类型映射到所有的父类映射到一个字符串,见https://github.com/RSuter/NJsonSchema/wiki/Type-Mappers

+0

我通过TypeMappers做到了: – Tobias