关于.NET通过API传入枚举名获取枚举内容的思考

因为项目内容原因,项目里建了很多枚举,但是因为懒所以不太想写枚举值对应文档,而且每次如果更新,维护文档又是一个很烦的事情,所以干脆想了个办法,写个API给前端,他传入枚举名称,就直接把枚举的值和说明都返回出去给他。

先写个方法,返回枚举的值和说明

复制代码
///传入枚举类型返回枚举键值对集合(key:枚举值,value:枚举Description内容)
1
public static List<KeyValuePair<int, string>> GetFields(Type type) 2 { 3 List<KeyValuePair<int, string>> result = new List<KeyValuePair<int, string>>(); 4 FieldInfo[] fields = type.GetFields(); 5 foreach (FieldInfo field in fields) 6 { 7 if (field.FieldType.IsEnum) 8 { 9 object[] attr = field.GetCustomAttributes(typeof(DescriptionAttribute), false); 10 string description = attr.Length == 0 ? field.Name : ((DescriptionAttribute)attr[0]).Description; 11 result.Add(new KeyValuePair<int, string>(Convert.ToInt32(field.GetValue(null)), description)); 12 } 13 } 14 return result; 15 }
复制代码

 

第二步,通过命令模式,判断是不是有存在符合名称的并且是枚举的内容,没有则直接返回,有就调用第一步的方法获取到说明后序列化return出去

这里的 CommonModel是我枚举类所在程序集的名称

 

复制代码
 1      public IActionResult GetEnumValue(string enumName)
 2         {
 3             //加载枚举所在命名空间程序集
 4             Assembly assembly = Assembly.Load("CommonModel");
 5 
 6             //判断该字符串是否为枚举名称
 7             var enumType = assembly.GetTypes().First(t =>  t.Name.Equals(enumName, StringComparison.OrdinalIgnoreCase) && t.IsEnum);
 8             if(enumType == null)
 9                 return Ok("不是有效枚举类");
10 
11             //获取枚举内容
12             var values = EnumHelper.GetFields(enumType);
13             var result = JsonConvert.SerializeObject(values);
14             return Ok(result);
15         }
复制代码

 打完收工,仅做记录

posted @   也也鱼  阅读(288)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示