如何解决即使设置了JsonSchemaFlattenAttribute,NSwag也会生成基类
我正在将NSwag用于我的ASP.NET Core Web api项目,但无法使其正常工作。我想做的是排除 IdentityUser 的某些基本属性。这是我的自定义用户类:
[DataContract]
[JsonSchemaFlattenAttribute]
public class User : IdentityUser
{
// Overridden variables
[DataMember( Name = "id" )]
[PersonalData]
public new string Id { get; set; }
[DataMember( Name = "email" )]
[ProtectedPersonalData]
public new string Email { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new DateTimeOffset? LockoutEnd { get; set; }
[PersonalData]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new bool TwoFactorEnabled { get; set; }
[PersonalData]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new bool PhoneNumberConfirmed { get; set; }
[ProtectedPersonalData]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string PhoneNumber { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string ConcurrencyStamp { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string SecurityStamp { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string PasswordHash { get; set; }
[PersonalData]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new bool EmailConfirmed { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string NormalizedEmail { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string NormalizedUserName { get; set; }
[ProtectedPersonalData]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string UserName { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new bool LockoutEnabled { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new int AccessFailedCount { get; set; }
// Custom variables
[DataMember( Name = "date_joined_utc" )]
public DateTime DateJoinedUtc { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public virtual ICollection<RefreshToken> RefreshTokens { get; set; }
// Optimistic concurrency
[Timestamp]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public byte[] RowVersion { get; set; }
}
哪个生成:
"User": {
"type": "object","required": [
"dateJoinedUtc"
],"properties": {
"id": {
"type": "string"
},"email": {
"type": "string"
},"dateJoinedUtc": {
"type": "string","format": "date-time"
}
},"allOf": [
{
"$ref": "#/definitions/IdentityUserOfString"
},{}
]
},"IdentityUserOfString": {
"type": "object","required": [
"emailConfirmed","phoneNumberConfirmed","twoFactorEnabled","lockoutEnabled","accessFailedCount"
],"userName": {
"type": "string"
},"normalizedUserName": {
"type": "string"
},"normalizedEmail": {
"type": "string"
},"emailConfirmed": {
"type": "boolean"
},"passwordHash": {
"type": "string"
},"securityStamp": {
"type": "string"
},"concurrencyStamp": {
"type": "string"
},"phoneNumber": {
"type": "string"
},"phoneNumberConfirmed": {
"type": "boolean"
},"twoFactorEnabled": {
"type": "boolean"
},"lockoutEnd": {
"type": "string","format": "date-time"
},"lockoutEnabled": {
"type": "boolean"
},"accessFailedCount": {
"type": "integer","format": "int32"
}
}
},
我对 JsonSchemaFlattenAttribute 的理解是,它应该排除基类,并将每个属性放在派生类中。那么为什么生成 IdentityUserOfString 类呢?我想念什么?
解决方法
出于某种原因,在User类上设置 OpenApiIgnore 可以解决该问题:
[DataContract]
//[JsonSchemaFlattenAttribute]
[OpenApiIgnore]
public class User : IdentityUser
生成:
"User": {
"type": "object","required": [
"dateJoinedUtc"
],"properties": {
"id": {
"type": "string"
},"email": {
"type": "string"
},"dateJoinedUtc": {
"type": "string","format": "date-time"
}
}
},
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。