使用前,需要对你的项目勾选输出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. 《Effective C#》系列之(五)——优化集合的使用

    一.优化集合的使用 在<Effective C#>这本书中,优化集合的使用是其中一章的内容.以下是该章节的一些核心建议,以及使用C#代码示例说明: 使用泛型集合:泛型集合可以避免装箱和拆箱 ...

  2. nginx请求头相关漏洞修复(http host&X-XSS-Protection)

    nginx请求头相关漏洞修复(http host&X-XSS-Protection) 参考链接:Nginx常见漏洞处理 - 码农教程 (manongjc.com) Web应用漏洞-NGINX各 ...

  3. 安装两个jdk Windows系统

    安装两个jdk Windows系统 本来装的是Java 8,现在有一个新的项目要到手上,需要的环境是Java 7,想着还有别的要用,所以就装两个在电脑上 jdk的下载直接去官网就行,不知道怎么下就看这 ...

  4. 力扣1127(MySQL)-用户购买平台(困难)

    题目: 支出表: Spending 这张表记录了用户在一个在线购物网站的支出历史,该在线购物平台同时拥有桌面端('desktop')和手机端('mobile')的应用程序.这张表的主键是 (user_ ...

  5. 力扣1107(MySQL)-每日新用户统计(中等)

    题目: Traffic 表: 该表没有主键,它可能有重复的行.activity 列是 ENUM 类型,可能取 ('login', 'logout', 'jobs', 'groups', 'homepa ...

  6. 从KPI到OKR,高阶产品人如何推动业务高速增长

    简介: 不管是核心大目标,还是O(Objectives),或者北极星指标,奇妙等式等等,最后都需要核心组织协同方式来推动整个目标聚焦以及过程的落地. 作为产品经理人,相信很多人都遇到过以下的灵魂拷问: ...

  7. DataX在数据迁移中的应用

    简介: DataX在数据迁移中的应用 1. DataX定义 首先简单介绍下datax是什么.DataX是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlSe ...

  8. [FAQ][Hardhat] Error HH501: Couldn't download compiler version 0.8.0. Please check your connection.

    当使用 npx hardhat compile 命令编译智能合约时,会先下载你在 hardhat.config.js 配置中对应版本的 solidity 编译器. 当网络不可达时,就会提示无法下载的错 ...

  9. dotnet 是否应该对 HttpResponseMessage 调用 Dispose 进行释放

    对于 HttpClient 的请求响应值 HttpResponseMessage 来说,既然继承了 IDisposable 接口,自然就是想让大家可以通过 using 或者手动调用 Dispose 进 ...

  10. SpringBoot-Http请求工具类

    一.编写请求配置类 import com.alibaba.fastjson.JSONObject; import org.springframework.context.annotation.Conf ...