上一篇net core 2.2 swagger的枚举描述,core 3.0 需要升级swagger到5.0rc版,配置需要做些修改,swaager启用了OpenApi标准,之前的枚举描述方法也失效了。
这里通过了反射程序集,获取所有枚举定义放入字典,然后通过OpenApiSchema.Key来查表找到对应的枚举类型,通过Microsoft.OpenApi.Any.OpenApiInteger.Value强转会枚举,再补写枚举对应的描述。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/// <summary> /// 基本状态 /// </summary> public enum BaseStatusEnum { /// <summary> /// 逻辑删除状态 /// </summary> [Description( "逻辑删除状态" )] LogicDelete = -1, /// <summary> /// 默认,未处理 /// </summary> [Description( "默认,未处理" )] Normal = 0, /// <summary> /// 已处理 /// </summary> [Description( "已处理" )] Processed = 1 } |
完整的Filter如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
/// <summary> /// Add enum value descriptions to Swagger /// </summary> public class SwaggerEnumFilter : IDocumentFilter { public void Apply(Microsoft.OpenApi.Models.OpenApiDocument swaggerDoc, DocumentFilterContext context) //public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context) { Dictionary< string , Type> dict = GetAllEnum(); foreach ( var item in swaggerDoc.Components.Schemas) //foreach (var item in swaggerDoc.Definitions) { var property = item.Value; var typeName = item.Key; Type itemType = null ; if (property.Enum != null && property.Enum.Count > 0) { if (dict.ContainsKey(typeName)) { itemType = dict[typeName]; } else { itemType = null ; } List<OpenApiInteger> list = new List<OpenApiInteger>(); foreach ( var val in property.Enum) { list.Add((OpenApiInteger)val); } property.Description += DescribeEnum(itemType, list); } } } private static Dictionary< string , Type> GetAllEnum() { Assembly ass = Assembly.Load( "Test.Model" ); Type[] types = ass.GetTypes(); Dictionary< string , Type> dict = new Dictionary< string , Type>(); foreach (Type item in types) { if (item.IsEnum) { dict.Add(item.Name, item); } } return dict; } private static string DescribeEnum(Type type, List<OpenApiInteger> enums) { var enumDescriptions = new List< string >(); foreach ( var item in enums) { if (type == null ) continue ; var value = Enum.Parse(type, item.Value.ToString()); var desc = GetDescription(type, value); if ( string .IsNullOrEmpty(desc)) enumDescriptions.Add($ "{item.Value.ToString()}:{Enum.GetName(type, value)}; " ); else enumDescriptions.Add($ "{item.Value.ToString()}:{Enum.GetName(type, value)},{desc}; " ); } return $ "<br/>{Environment.NewLine}{string.Join(" <br/> " + Environment.NewLine, enumDescriptions)}" ; } private static string GetDescription(Type t, object value) { foreach (MemberInfo mInfo in t.GetMembers()) { if (mInfo.Name == t.GetEnumName(value)) { foreach (Attribute attr in Attribute.GetCustomAttributes(mInfo)) { if (attr.GetType() == typeof (DescriptionAttribute)) { return ((DescriptionAttribute)attr).Description; } } } } return string .Empty; } } |
本博客Android APP 下载 |
![]() |
支持我们就给我们点打赏 |
![]() |
支付宝打赏 支付宝扫一扫二维码 |
![]() |
微信打赏 微信扫一扫二维码 |
![]() |
如果想下次快速找到我,记得点下面的关注哦!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2016-07-09 PHP中设置时区方法小结
2016-07-09 php示例代码之empty函数
2016-07-09 LAMP配置虚拟目录
2016-07-09 php示例代码之读取文件
2016-07-09 PHP isset() 检测变量是否设置
2016-07-09 php示例代码之使用mysql_fetch_object函数
2016-07-09 php示例代码之使用MySQLi接口