3

我们正在使用 swagger / nswag 来记录 webapi 项目。

作为ActionMethods 的BodyParameters,我们使用带有后缀Command 的类,其中包含用于创建持久在数据库中的Domain-Object 的参数。

命令类可能如下所示:

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

Position 是一个简单的 int,而 Parent 是一个保存在数据库中的域类。可能看起来像这样:

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 时,父级通过 Dao 由其 Id 加载。现在的问题是,swagger/nswag 不理解“魔术”并显示方法的参数,如下所示:

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

有什么方法可以告诉 swagger 替换父类型的类型,使其看起来像这样:

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

1 回答 1

5

您可以使用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

于 2017-08-07T10:44:51.407 回答