c# - Swagger/NSwag : Redefine Parameter Type

标签 c# json asp.net-web-api2 swagger nswag

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

作为 ActionMethods 的 BodyParameters,我们使用带有后缀 Command 的类,其中包含例如参数。创建一个持久化在数据库中的域对象。

命令类可能如下所示:

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 替换 Type for parent 使其看起来像这样:

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

最佳答案

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

关于c# - Swagger/NSwag : Redefine Parameter Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45544490/

相关文章:

c# - 编译 CompilationUnitSyntax 的正确方法

c# - 在 C# 中使用 WSDL 发送和接收

c# - 将 xml 元素的内容读取为 double

java - Spring Boot PostMapping 反序列化长数组

json - 如何在Dart中使用枚举的属性名称将JSON映射到对象

c# - 使用 Web API 对 JWT token 进行单元测试

api - ASP.NET Web API 2 主体类型( bool 值)错误

c# - 如何从 javascript 访问数组列表、字符串数组或列表?

javascript - 使用 jQuery 读取 JSON 数组

c# - 如何选择列的最大值并检索多个结果?