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