翼度科技»论坛 编程开发 .net 查看内容

使用Wesky.Net.Opentools库,一行代码实现自动解析实体类summary注释信息(

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
使用前,需要对你的项目勾选输出api文档文件。
引用Wesky.Net.OpenTools包,保持1.0.11版本或以上。
 为了方便,我直接在昨天的演示基础上,继续给实体类添加注释。昨天的演示文章可参考:C#/.NET一行代码把实体类类型转换为Json数据字符串https://mp.weixin.qq.com/s/nVcURD0lf5-AQOVzwHqcxw对实体类添加注释:
然后传入实体类型,即可获取到类型数据集合:
运行一下看下效果:
以上只是简单演示,你也可以用来快速生成实体类说明文档。例如通过反射,获取所有类型,然后进行代入,解析出每个类型里面的属性以及注释,直接就是你的一个演示文档了。解析部分核心代码: 
  1.   /// <summary>
  2.   /// 生成给定类型的所有属性的摘要信息列表,搜索所有相关XML文档。
  3.   /// Generates a list of summary information for all properties of a given type, searching through all relevant XML documents.
  4.   /// </summary>
  5.   /// <param name="type">要分析的类型。The type to analyze.</param>
  6.   /// <param name="parentPrefix">处理属性路径时用于嵌套属性的前缀。Prefix for nested properties to handle property paths correctly.</param>
  7.   /// <returns>摘要信息实体列表。A list of summary information entities.</returns>
  8.   public static List<DynamicSumaryInfo> GenerateEntitySummaries(Type type, string parentPrefix = "")
  9.   {
  10.       var summaryInfos = new List<DynamicSumaryInfo>();
  11.       IEnumerable<string> xmlPaths = GetAllXmlDocumentationPaths();
  12.       foreach (string xmlPath in xmlPaths)
  13.       {
  14.           if (File.Exists(xmlPath))
  15.           {
  16.               XDocument xmlDoc = XDocument.Load(xmlPath);
  17.               XElement root = xmlDoc.Root;
  18.               summaryInfos.AddRange(ExtractSummaryInfo(type, root, parentPrefix));
  19.           }
  20.       }
  21.       return summaryInfos;
  22.   }
  23.   /// <summary>
  24.   /// 获取当前执行环境目录下所有XML文档的路径。
  25.   /// Retrieves the paths to all XML documentation files in the current execution environment directory.
  26.   /// </summary>
  27.   /// <returns>所有XML文档文件的路径列表。A list of paths to all XML documentation files.</returns>
  28.   private static IEnumerable<string> GetAllXmlDocumentationPaths()
  29.   {
  30.       string basePath = AppContext.BaseDirectory;
  31.       return Directory.GetFiles(basePath, "*.xml", SearchOption.TopDirectoryOnly);
  32.   }
  33.   /// <summary>
  34.   /// 从XML文档中提取指定类型的所有属性的摘要信息。
  35.   /// Extracts summary information for all properties of a specified type from an XML document.
  36.   /// </summary>
  37.   /// <param name="type">属性所属的类型。The type to which the properties belong.</param>
  38.   /// <param name="root">XML文档的根元素。The root element of the XML document.</param>
  39.   /// <param name="parentPrefix">属性的前缀路径。The prefix path for properties.</param>
  40.   /// <returns>摘要信息实体列表。A list of summary information entities.</returns>
  41.   private static List<DynamicSumaryInfo> ExtractSummaryInfo(Type type, XElement root, string parentPrefix)
  42.   {
  43.       var infos = new List<DynamicSumaryInfo>();
  44.       foreach (PropertyInfo property in type.GetProperties())
  45.       {
  46.           string fullPath = string.IsNullOrEmpty(parentPrefix) ? property.Name : $"{parentPrefix}.{property.Name}";
  47.           string typeName = property.PropertyType.Name;
  48.           if (property.PropertyType.IsClass && property.PropertyType != typeof(string))
  49.           {
  50.               Type propertyType = property.PropertyType;
  51.               if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(List<>))
  52.               {
  53.                   propertyType = propertyType.GetGenericArguments()[0];
  54.                   typeName = $"List<{propertyType.Name}>";
  55.               }
  56.               infos.AddRange(GenerateEntitySummaries(propertyType, fullPath));
  57.           }
  58.           else
  59.           {
  60.               string summary = GetPropertySummary(root, type, property);
  61.               infos.Add(new DynamicSumaryInfo
  62.               {
  63.                   Name = fullPath,
  64.                   TypeName = typeName,
  65.                   Summary = summary ?? string.Empty
  66.               });
  67.           }
  68.       }
  69.       return infos;
  70.   }
复制代码
 
OpenTools系列文章快捷链接【新版本完全兼容旧版本,不需要更新任何代码均可使用】:1.0.10版本:C#/.NET一行代码把实体类类型转换为Json数据字符串https://mp.weixin.qq.com/s/nVcURD0lf5-AQOVzwHqcxw1.0.8版本:上位机和工控必备!用.NET快速搞定Modbus通信的方法https://mp.weixin.qq.com/s/Yq6kuXzFglHfNUqrHcQO9w1.0.7版本:大揭秘!.Net如何在5分钟内快速实现物联网扫码器通用扫码功能?https://mp.weixin.qq.com/s/-5VuLAS6HlElgDQXRY9-BQ1.0.6版本:.NET实现获取NTP服务器时间并同步(附带Windows系统启用NTP服务功能)https://mp.weixin.qq.com/s/vMW0vYC-D9z0Dp6HFSBqyg1.0.5版本:C#使用P/Invoke来实现注册表的增删改查功能https://mp.weixin.qq.com/s/LpsjBhDDzkwyLU_tIpF-lg1.0.3版本:C#实现图片转Base64字符串,以及base64字符串在Markdown文件内复原的演示https://mp.weixin.qq.com/s/n9VtTCIiVUbHJk7OfoCcvA1.0.2版本:C#实现Ping远程主机功能(支持IP和域名)https://mp.weixin.qq.com/s/d-2HcIM1KaLo-FrrTLkwEw1.0.1版本:开始开源项目OpenTools的创作(第一个功能:AES加密解密)https://mp.weixin.qq.com/s/78TA-m‍st‍459AuvAHwQViqQ 【备注】包版本完全开源,并且没有任何第三方依赖。使用.net framework 4.6+、任意其他跨平台.net版本环境,均可直接引用。 再次感谢各位阅读~~~  
来源:https://www.cnblogs.com/weskynet/p/18236082
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具