牛啊后续:如何一行C#代码实现解析类型的Summary注释(可用于数据字典快速生成)...

前言:下午有小伙伴要求,让我继续做个解析实体类注释信息的内容。所以我也顺便加入进来。以下开始正文实战操作:

项目需要勾选输出api文档文件。这样就可以让所有实体类的summary信息被写入到输出目录下。如果有多个xml文件也没关系,下面的包已经实现自动解析多个xml文件功能,只选取匹配的那个。

3ffb9f5d3476db6f11f7243c81780a8e.png

要引用 Wesky.Net.OpenTools 包,保持1.0.11版本或以上

c7f262cf8bccc6298328662279c03919.png

为了方便,我直接在昨天的演示基础上,继续给实体类添加注释。

昨天的演示文章可参考:

C#/.NET一行代码把实体类类型转换为Json数据字符串

https://mp.weixin.qq.com/s/nVcURD0lf5-AQOVzwHqcxw

对实体类添加注释,该实体类嵌套一层集合属性。

fab8e2fe68a6009a55b152cad36e60be.png

然后传入实体类型,即可获取到类型数据集合:

29c28bbbf4138fbcbb11e6f38ca5dbae.png

运行一下看下效果:

553ad40910cfb499a0a40b58f5f56dee.png

以上只是简单演示,你也可以用来快速生成实体类说明文档。例如:通过反射,获取所有类型,然后进行代入,解析出每个类型里面的属性以及注释,直接就是你的一个实体说明文档了

解析部分核心代码:

/// <summary>/// 生成给定类型的所有属性的摘要信息列表,搜索所有相关XML文档。/// Generates a list of summary information for all properties of a given type, searching through all relevant XML documents./// </summary>/// <param name="type">要分析的类型。The type to analyze.</param>/// <param name="parentPrefix">处理属性路径时用于嵌套属性的前缀。Prefix for nested properties to handle property paths correctly.</param>/// <returns>摘要信息实体列表。A list of summary information entities.</returns>public static List<DynamicSumaryInfo> GenerateEntitySummaries(Type type, string parentPrefix = ""){var summaryInfos = new List<DynamicSumaryInfo>();IEnumerable<string> xmlPaths = GetAllXmlDocumentationPaths();foreach (string xmlPath in xmlPaths){if (File.Exists(xmlPath)){XDocument xmlDoc = XDocument.Load(xmlPath);XElement root = xmlDoc.Root;summaryInfos.AddRange(ExtractSummaryInfo(type, root, parentPrefix));}}return summaryInfos;}/// <summary>/// 获取当前执行环境目录下所有XML文档的路径。/// Retrieves the paths to all XML documentation files in the current execution environment directory./// </summary>/// <returns>所有XML文档文件的路径列表。A list of paths to all XML documentation files.</returns>private static IEnumerable<string> GetAllXmlDocumentationPaths(){string basePath = AppContext.BaseDirectory;return Directory.GetFiles(basePath, "*.xml", SearchOption.TopDirectoryOnly);}/// <summary>/// 从XML文档中提取指定类型的所有属性的摘要信息。/// Extracts summary information for all properties of a specified type from an XML document./// </summary>/// <param name="type">属性所属的类型。The type to which the properties belong.</param>/// <param name="root">XML文档的根元素。The root element of the XML document.</param>/// <param name="parentPrefix">属性的前缀路径。The prefix path for properties.</param>/// <returns>摘要信息实体列表。A list of summary information entities.</returns>private static List<DynamicSumaryInfo> ExtractSummaryInfo(Type type, XElement root, string parentPrefix){var infos = new List<DynamicSumaryInfo>();foreach (PropertyInfo property in type.GetProperties()){string fullPath = string.IsNullOrEmpty(parentPrefix) ? property.Name : $"{parentPrefix}.{property.Name}";string typeName = property.PropertyType.Name;if (property.PropertyType.IsClass && property.PropertyType != typeof(string)){Type propertyType = property.PropertyType;if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(List<>)){propertyType = propertyType.GetGenericArguments()[0];typeName = $"List<{propertyType.Name}>";}infos.AddRange(GenerateEntitySummaries(propertyType, fullPath));}else{string summary = GetPropertySummary(root, type, property);infos.Add(new DynamicSumaryInfo{Name = fullPath,TypeName = typeName,Summary = summary ?? string.Empty});}}return infos;}

如果以上内容对你有帮助,欢迎点赞、留言、在看、转发,也欢迎关注我的个人公众号:【Dotnet Dancer】

快捷关注:

1c96efdeb12c62f1eeee474bf858abe5.jpeg

OpenTools系列文章快捷链接【新版本完全兼容旧版本,不需要更新任何代码均可使用】:

1.0.10版本:

C#/.NET一行代码把实体类类型转换为Json数据字符串

https://mp.weixin.qq.com/s/nVcURD0lf5-AQOVzwHqcxw

1.0.8版本:

上位机和工控必备!用.NET快速搞定Modbus通信的方法

https://mp.weixin.qq.com/s/Yq6kuXzFglHfNUqrHcQO9w

1.0.7版本:

大揭秘!.Net如何在5分钟内快速实现物联网扫码器通用扫码功能?

https://mp.weixin.qq.com/s/-5VuLAS6HlElgDQXRY9-BQ

1.0.6版本:

.NET实现获取NTP服务器时间并同步(附带Windows系统启用NTP服务功能)

https://mp.weixin.qq.com/s/vMW0vYC-D9z0Dp6HFSBqyg

1.0.5版本:

C#使用P/Invoke来实现注册表的增删改查功能

https://mp.weixin.qq.com/s/LpsjBhDDzkwyLU_tIpF-lg

1.0.3版本:

C#实现图片转Base64字符串,以及base64字符串在Markdown文件内复原的演示

https://mp.weixin.qq.com/s/n9VtTCIiVUbHJk7OfoCcvA

1.0.2版本:

C#实现Ping远程主机功能(支持IP和域名)

https://mp.weixin.qq.com/s/d-2HcIM1KaLo-FrrTLkwEw

1.0.1版本:

开始开源项目OpenTools的创作(第一个功能:AES加密解密)

https://mp.weixin.qq.com/s/78TA-m‍st‍459AuvAHwQViqQ

【备注】包版本完全开源,并且没有任何第三方依赖。使用.net framework 4.6+、任意其他跨平台.net版本环境,均可直接引用。

再次感谢各位阅读~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序 UI 风格美不胜收

小程序 UI 风格美不胜收 小程序 UI 风格美不胜收

MyEclipse中properties文件中文乱码(Unicode字符)解决办法

程序代码园发文地址&#xff1a;MyEclipse中properties文件中文乱码&#xff08;Unicode字符&#xff09;解决办法-程序代码园小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,MyEclipse中properties文件中文乱码&#xff08;Unicode字符&#xff09;解决办法htt…

Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。

文章目录 前言一、Django ORM介绍二、项目快速搭建三、操作1、view.pya、增加操作b、删除操作c、修改操作d、查询操作 2、urls.py 前言 上接博文&#xff1a;Django学习二&#xff1a;配置mysql&#xff0c;创建model实例&#xff0c;自动创建数据库表&#xff0c;对mysql数据…

一周发文9篇!MIMIC-IV数据库周报(5.22~5.28)

重症医学数据库&#xff08;MIMIC&#xff09;是由计算生理学实验室开发的公开数据集&#xff0c;其中包括与数千个重症监护病房入院相关的去识别化健康数据&#xff0c;致力于推动临床信息学、流行病学和机器学习的研究。 MIMIC数据库于2003年在美国国立卫生研究院的资助下&am…

2024上海初中生古诗文大会倒计时4个半月:单选题真题示例和独家解析

现在距离2024年初中生古诗文大会还有4个半月时间&#xff0c;我们来看10道选择题真题和详细解析&#xff0c;了解古诗文大会的考察方式和知识点&#xff0c;从而更好地备考。 以下题目截取自我独家制作的在线真题集&#xff0c;都是来自于历届真题&#xff0c;去重、合并后&am…

面试成功的不二法门:详解Vue3答题章法

前言 面试题在网络上有如海洋之深&#xff0c;对于同一知识点&#xff0c;每个人的理解也各有千秋。我们在面试中常常会遇到一个瞬息间脑海里一片空白的情况&#xff0c;其实这并不是因为我们不懂&#xff0c;而是因为我们在回答的时候缺乏一个清晰的思路。那么问题来了&#x…

《魔法与科技的融合:SpringBoot运维的现代传说》

揭开了SpringBoot应用部署的神秘面纱。从云平台的选型到Docker的容器化魔法&#xff0c;再到Kubernetes的集群力量&#xff0c;每一步都充满了奇幻色彩。文章以轻松幽默的笔触&#xff0c;带领读者穿梭于现代应用部署的各个角落&#xff0c;探索自动化部署的奥秘&#xff0c;学…

【深度学习】PuLID: Pure and Lightning ID Customization via Contrastive Alignment

论文&#xff1a;https://arxiv.org/abs/2404.16022 代码&#xff1a;https://github.com/ToTheBeginning/PuLID 文章目录 AbstractIntroductionRelated WorkMethods Abstract 我们提出了一种新颖的、无需调整的文本生成图像ID定制方法——Pure and Lightning ID customizatio…

微信好友朋友圈的三天、半年可见怎么破?方法拿走不谢

『Code掘金』问大家&#xff0c;有没有这种经历&#xff0c;当你想去翻某人的朋友圈时&#xff0c;对方设置成了3天可见&#xff0c;之前的内容没法看到了。 不过没关系&#xff01;今天『Code掘金』给大家分享一款导出朋友圈的工具&#xff0c;让大家留住痕迹。 WechatMomen…

初探沁恒CH32V307VCT6评估板 1-1外部中断EXTI

旋转编码器计次 1&#xff0c;创建 .C .H 文件 Count_Sonser.c Count_Sonser.h 2&#xff0c;包含头文件 #include "ch32v30x.h" //#include "debug.h" #include "Count_Sonser.h" 注意&#xff1a;如果不包含第一第二个头文件uint、int这…

如何掌握 Java 正则表达式 的基本语法及在 Java 中的应用

正则表达式是一种用于匹配字符串的模式&#xff0c;在许多编程语言中广泛使用。Java 正则表达式提供了强大的文本处理能力&#xff0c;能够对字符串进行查找、替换、分割等操作。 一、正则表达式的基本语法 正则表达式由普通字符和特殊字符组成。普通字符包括字母、数字和标点…

网络协议三

数据中心 一、DNS 现在网站的数目非常多&#xff0c;常用的网站就有二三十个&#xff0c;如果全部用 IP 地址进行访问&#xff0c;恐怕很难记住 根 DNS 服务器 &#xff1a;返回顶级域 DNS 服务器的 IP 地址 顶级域 DNS 服务器&#xff1a;返回权威 DNS 服务器的 IP 地址 …

汇凯金业:贵金属交易规则有哪些

贵金属投资目前非常火热&#xff0c;许多投资者从中获得了可观的收益。新手投资者在进入贵金属市场及其交易之前&#xff0c;务必要了解清楚贵金属的交易规则。了解规则和差异能帮助新手更好地进行贵金属投资交易。下面我们以现货类贵金属为例&#xff0c;详细说明贵金属的交易…

一周学会Django5 Python Web开发 - Django5内置Auth认证系统-用户修改密码实现

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计59条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

基于springboot的-仓库 管理系统【附:资料➕文档】

前言&#xff1a;我是源码分享交流Coding&#xff0c;专注JavaVue领域&#xff0c;专业提供程序设计开发、源码分享、 技术指导讲解、各类项目免费分享&#xff0c;定制和毕业设计服务&#xff01; 免费获取方式--->>文章末尾处&#xff01; 项目介绍&#xff1a; 管理员…

数字IC后端物理验证PV | TSMC 12nm Calibre Base Layer DRC案例解析

基于TSMC 12nm ARM A55 upf flow后端设计实现训练营将于6月中旬正式开班&#xff01;小班教学&#xff01;目前还有3个名额&#xff0c;招满为止&#xff01;有需要可以私信小编 ic-backend2018报名。吾爱IC社区所有训练营课程均为直播课&#xff01; 这个课程支持升级成双核A…

服务器禁止密码登陆

转载请标明出处&#xff1a;https://blog.csdn.net/donkor_/article/details/139444224 文章目录 一、前言二、编辑sshd_config文件三、重启服务四、总结 一、前言 复杂的密码&#xff0c;登陆服务器的时候&#xff0c;也是很不方便的。并且频繁登陆&#xff0c;暴露给外界&am…

c++ 里函数选择的优先级:普通函数、模板函数、万能引用,编译器选择哪个执行呢?

看大师写的代码时&#xff0c;除了在类里定义了 copy 构造函数&#xff0c;移动构造函数&#xff0c;还定义了对形参采取万能引用的构造函数&#xff0c;因此有个疑问&#xff0c;这时候的构造函数优先级是什么样的呢&#xff1f;简化逻辑测试一下&#xff0c;如下图&#xff0…

【Vue】路由的封装抽离

问题&#xff1a;所有的路由配置都在main.js中合适吗&#xff1f; 目标&#xff1a;将路由模块抽离出来。 好处&#xff1a;拆分模块&#xff0c;利于维护 路径简写&#xff1a; 脚手架环境下 指代src目录&#xff0c;可以用于快速引入组件 完整代码 router/index.js // 但…

探索贷款交易平台的技术架构与创新应用

随着金融科技的快速发展&#xff0c;贷款交易平台作为金融行业的重要组成部分&#xff0c;正扮演着越来越重要的角色。本文将深入探讨贷款交易平台的技术架构和创新应用&#xff0c;从前端设计、后端系统、安全保障和智能化服务等方面进行全面解析&#xff0c;帮助读者更好地了…