我总是向我的所有枚举添加一个 Uninitialized
值并将其设置为 0
以处理我反序列化具有从未设置的枚举属性值的对象的情况.
enum MyEnum
{
Uninitialized = 0,
MyEnumValue1 = 1,
MyEnumValue2 = 2,
MyEnumValue3 = 3,
}
但是,我不希望 Uninitialized
值出现在我的 Swagger 文档中。
我已经尝试将 [JsonIgnore]
属性添加到该值,但这没有用。
有人知道如何实现吗?
最佳答案
以防万一其他人为此苦苦挣扎。您可以创建自定义 SchemaFilter 并使用自定义属性(在此示例中:OpenApiIgnoreEnumAttribute
)对这些枚举值填充 Enum
属性过滤。
public class OpenApiIgnoreEnumSchemaFilter : ISchemaFilter
{
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
if (context.Type.IsEnum)
{
var enumOpenApiStrings = new List<IOpenApiAny>();
foreach (var enumValue in Enum.GetValues(context.Type))
{
var member = context.Type.GetMember(enumValue.ToString())[0];
if (!member.GetCustomAttributes<OpenApiIgnoreEnumAttribute>().Any())
{
enumOpenApiStrings.Add(new OpenApiString(enumValue.ToString()));
}
}
schema.Enum = enumOpenApiStrings;
}
}
}
public class OpenApiIgnoreEnumAttribute : Attribute
{
}
public enum ApplicationRole
{
[OpenApiIgnoreEnum]
DoNotExpose = 1,
ValueA = 2,
ValueB = 3,
}
关于c# - 从 Swagger 中排除特定的枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54933188/