其他分享
首页 > 其他分享> > 关于.NET通过API传入枚举名获取枚举内容的思考

关于.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         }

 打完收工,仅做记录

标签:return,attr,field,枚举,API,result,NET,GetFields
来源: https://www.cnblogs.com/pjiejoin/p/16283048.html