使用前,需要对你的项目勾选输出api文档文件。
引用Wesky.Net.OpenTools包,保持1.0.11版本或以上。
 
为了方便,我直接在昨天的演示基础上,继续给实体类添加注释。
昨天的演示文章可参考:
C#/.NET一行代码把实体类类型转换为Json数据字符串
对实体类添加注释:
然后传入实体类型,即可获取到类型数据集合:
运行一下看下效果:
以上只是简单演示,你也可以用来快速生成实体类说明文档。例如通过反射,获取所有类型,然后进行代入,解析出每个类型里面的属性以及注释,直接就是你的一个演示文档了。
解析部分核心代码:
 
  /// <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;
}
OpenTools系列文章快捷链接【新版本完全兼容旧版本,不需要更新任何代码均可使用】:
1.0.10版本:
C#/.NET一行代码把实体类类型转换为Json数据字符串
1.0.8版本:
上位机和工控必备!用.NET快速搞定Modbus通信的方法
1.0.7版本:
大揭秘!.Net如何在5分钟内快速实现物联网扫码器通用扫码功能?
1.0.6版本:
.NET实现获取NTP服务器时间并同步(附带Windows系统启用NTP服务功能)
1.0.5版本:
C#使用P/Invoke来实现注册表的增删改查功能
1.0.3版本:
C#实现图片转Base64字符串,以及base64字符串在Markdown文件内复原的演示
1.0.2版本:
C#实现Ping远程主机功能(支持IP和域名)
1.0.1版本:
开始开源项目OpenTools的创作(第一个功能:AES加密解密)
 
【备注】包版本完全开源,并且没有任何第三方依赖。使用.net framework 4.6+、任意其他跨平台.net版本环境,均可直接引用。
 
再次感谢各位阅读~~~
 
 

使用Wesky.Net.Opentools库,一行代码实现自动解析实体类summary注释信息(可用于数据实体文档的快速实现)的更多相关文章

  1. [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码

    前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...

  2. Python一行代码搞定的事情

    python -m SimpleHTTPServer 8000 http://127.0.0.1:8000/ 有了这一行代码分享本地盘内容就不需要FTP了. pydoc:Python文档工具 pyth ...

  3. Python:如何用一行代码获取上个月是几月

    现在转一篇志军100发于公众号 Python之禅的文章: Python:如何用一行代码获取上个月是几月 抱歉我用了个有点标题党的标题,因为担心你错过了本文,但内容绝对干货,本文介绍的关于Python时 ...

  4. SharePoint 更新文档库文档标题(Title)字段

    前言:记录下写代码中遇到的小问题,帮同事写一个批量更新文档库标题字段的小程序,本来以为就Update一下就可以了,10分钟可以搞定.结果10分钟过去了,代码写好了,执行起来不报错,调试也没问题,只是要 ...

  5. 【毕业设计】基于Android的家校互动平台开发(内含完整代码和所有文档)——爱吖校推(你关注的,我们才推)

    ☆ 写在前面 之前答应大家的毕业答辩之后把所有文档贡献出来,现在答辩已过,LZ信守承诺,把所有文档开源到了GitHub(这个地址包含所有的代码和文档以及PPT,外层为简单的代码).还望喜欢的朋友们,不 ...

  6. 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档

    在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...

  7. 迁移TFS,批量将文档导入SharePoint 2013 文档库

    一.需求分析 公司需要将存在于旧系统(TFS)所有的文档迁移至新系统(SharePoint 2013).现已经将50G以上的文档拷贝到SharePoint 2013 Server上.这些文档是一些不规 ...

  8. 随时发布:REST API文档的代码仓库中的持续集成与协作

    本文主要内容:API文档提供了预测客户成功的关键路径:在代码附近的文档上进行协作可以更好地检查代码和文档文件,提高自动化效率,并专门针对文档进行质量测试:提供通用文档框架,标准,自动化和工具,以提高团 ...

  9. 使用VitePress搭建及部署vue组件库文档

    每个组件库都有它们自己的文档.所以当我们开发完成我们自己的组件库必须也需要一个组件库文档.如果你还不了解如何搭建自己的组件库可以看这里->从零搭建Vue3组件库.看完这篇文章你就会发现原来搭建和 ...

  10. Vitepress搭建组件库文档(下)—— 组件 Demo

    上文 <Vitepress搭建组件库文档(上)-- 基本配置>已经讨论了 vitepress 搭建组件库文档的基本配置,包括站点 Logo.名称.首页 home 布局.顶部导航.左侧导航等 ...

随机推荐

  1. 【pytorch学习】之线性代数

    3 线性代数 3.1 标量 如果你曾经在餐厅支付餐费,那么应该已经知道一些基本的线性代数,比如在数字间相加或相乘.例如,北京的温度为52◦F(华氏度,除摄氏度外的另一种温度计量单位).严格来说,仅包含 ...

  2. BizWorks助力企业应用的高效开发与复用

    简介: BizWorks作为企业级云原生应用数字工作台,能很好地支撑企业数字中台建设.云原生应用开发.企业资产运营管理等场景.本文不会全面介绍BizWorks平台的能力,而是着重介绍BizWorks在 ...

  3. 阿里云峰会 | 阿里云CDN六大边缘安全能力,全力助推政企数字化转型

    6月9日,2020年阿里云线上峰会召开.阿里云智能总裁张建锋认为,数字化已经成为中国经济的主要驱动力,疫情让政府.企业都认识到数字化的迫切性.在峰会上,阿里云CDN正式对外发布基于CDN构建的六大边缘 ...

  4. 函数计算 GB 镜像秒级启动:下一代软硬件架构协同优化揭秘

    ​简介:本文将介绍借助函数计算下一代 IaaS 底座神龙裸金属和安全容器,进一步降低绝对延迟且能够大幅降低冷启动频率. 作者:修踪 背景 函数计算在 2020 年 8 月创新地提供了容器镜像的函数部署 ...

  5. [ML] Google colab GPU 免费使用, 可挂载 Google drive

    colab 的文本行就相当于命令行,命令统一都在前面加 ! . 开启 GPU 加速,通过菜单栏的 "修改" 菜单,选择 "笔记本设置". 挂载 Google d ...

  6. WPF 通过 Windows Template Studio 快速搭建项目框架和上手项目

    本文对新手友好.在咱开始一个新项目的时候,可以利用 Windows Template Studio 快速搭建整个项目的框架.搭建出来的框架比较现代化,适合想要快速开发一个项目的大佬使用,也适合小白入门 ...

  7. 深入理解 C++ 中的多态与文件操作

    C++ 多态 多态(Polymorphism)是面向对象编程(OOP)的核心概念之一,它允许对象在相同操作下表现出不同的行为.在 C++ 中,多态通常通过继承和虚函数来实现. 理解多态 想象一个场景, ...

  8. 后宫酒店HaremHotel游戏Python游戏作弊方法游戏金币增加方法

    额,这个游戏嘛,内容就不说了, 顺便送给大家下载地址:https://store.zhaimaojun.cn/GameDetail/280 这个游戏刚开始起步其实比较困难,因为没钱啊,动不动就要花钱, ...

  9. WEB服务与NGINX(4)-NGINX实现虚拟主机

    目录 1 http基础配置参数详解 2 搭建虚拟主机 2.1 基于ip的虚拟主机 2.2 基于端口的虚拟主机 2.3 基于域名的虚拟主机 1 http基础配置参数详解 [root@nginx01 ~] ...

  10. C#TMS系统学习(BaseCity页面)

    C#TMS系统代码-基础页面BaseCity学习 本人纯新手,刚进公司跟领导报道,我说我是java全栈,他问我会不会C#,我说大学学过,他说这个TMS系统就给你来管了.外包已经把代码给我了,这几天先把 ...