c# - 从 Swagger 中排除特定的枚举值

标签 c# .net enums swagger swashbuckle

我总是向我的所有枚举添加一个 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/

相关文章:

c# - 部分更新 EF6 中的实体

c# - 如何使用 C# 从网页创建 xps 文件?

c# - 在 WPF 中渲染清晰的线条

c# - 二叉搜索树的递归函数实现

C++ 双重枚举值赋值

java - 将常量 Webdriver 元素存储在枚举中

类配置中的 Java boolean 选项

c# - 在 Visual Studio 中调试时出现“驱动器中没有磁盘”错误

c# - Grapevine.Interfaces.Server.HttpResponse.SendResponse 处未处理的异常

.net - .NET 中属性的嵌套类访问方法