我们使用swagger / nswag来记录webapi项目。
作为ActionMethods的BodyParameters,我们使用带有后缀Command的类,其中包含参数,例如:创建一个持久存储在数据库中的Domain-Object。
Command-Class可能如下所示:
public class CreateChildCommand {
public Parent Parent { get; set; }
public int Position { get; set; }
}
虽然Position是一个简单的int,但Parent是一个持久存储在数据库中的Domain-Class。可能看起来像这样:
public class Parent {
public Guid Id { get; set; }
public string Name { get; set; }
...
}
它可以通过Id从数据库加载,所以我们只需在命令参数的Json中传递id作为参数,如下所示:
{
"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"
}
答案 0 :(得分: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