关于.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 }
打完收工,仅做记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通