Rob*_*nes 4 .net c# enums swagger swashbuckle
我总是Uninitialized向所有枚举添加一个值,并将其设置为0处理反序列化具有从未设置的枚举属性值的对象的情况。
enum MyEnum
{
Uninitialized = 0,
MyEnumValue1 = 1,
MyEnumValue2 = 2,
MyEnumValue3 = 3,
}
Run Code Online (Sandbox Code Playgroud)
但是,我不希望该Uninitialized值显示在我的 Swagger 文档中。
我尝试将[JsonIgnore]属性添加到该值,但这不起作用。
有人知道如何做到这一点吗?
Roy*_*n46 12
以防万一其他人遇到这个问题。您可以创建自定义 SchemaFilter 并Enum使用自定义属性填充这些枚举值的属性过滤(在此示例中:OpenApiIgnoreEnumAttribute)。
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
public class OpenApiIgnoreEnumAttribute : Attribute
{
}
Run Code Online (Sandbox Code Playgroud)
public enum ApplicationRole
{
[OpenApiIgnoreEnum]
DoNotExpose = 1,
ValueA = 2,
ValueB = 3,
}
Run Code Online (Sandbox Code Playgroud)