using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { public class EnumSchemaFilter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { if (context.Type.IsEnum) { // 枚举类型的描述(来自枚举本身的注释) schema.Description ??= GetEnumDescription(context.Type); } } // 获取枚举类型的注释 private string GetEnumDescription(Type enumType) { var xmlDoc = XmlDocUtils.GetXmlDocAsync().Result; var member = XmlDocUtils.GetXmlDocMemberAsync(enumType, xmlDoc).Result; var description = member?.Summary ?? ""; foreach (var enumValue in Enum.GetValues(enumType)) { var enumMember = enumType.GetMember(enumValue.ToString()).First(); var enumXmlDocMember = XmlDocUtils.GetXmlDocMemberAsync(enumMember, xmlDoc).Result; description += $"{enumValue}-{enumXmlDocMember?.Summary} "; } return description; } } }