牛啊后續:如何一行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.pswp.cn/web/23628.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23628.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23628.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小程序 UI 風格美不勝收

小程序 UI 風格美不勝收 小程序 UI 風格美不勝收

PostgreSQL的視圖pg_stat_replication

PostgreSQL的視圖pg_stat_replication pg_stat_replication 是 PostgreSQL 提供的一個系統視圖&#xff0c;用于顯示主服務器上當前正在進行的復制會話的信息。它可以幫助數據庫管理員監控和管理主從復制的狀態&#xff0c;確保數據的正確同步和高可靠性。 pg_stat_replicati…

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…

數據倉庫緩慢變化維介紹

緩慢變化維&#xff08;Slowly Changing Dimensions, SCD&#xff09;是數據倉庫設計中的一個重要概念&#xff0c;用于處理維度表中隨時間緩慢變化的屬性。維度表中的數據通常描述業務實體&#xff08;如客戶、產品、員工等&#xff09;&#xff0c;而這些實體的某些屬性&…

面試成功的不二法門:詳解Vue3答題章法

前言 面試題在網絡上有如海洋之深&#xff0c;對于同一知識點&#xff0c;每個人的理解也各有千秋。我們在面試中常常會遇到一個瞬息間腦海里一片空白的情況&#xff0c;其實這并不是因為我們不懂&#xff0c;而是因為我們在回答的時候缺乏一個清晰的思路。那么問題來了&#x…

《魔法與科技的融合:SpringBoot運維的現代傳說》

揭開了SpringBoot應用部署的神秘面紗。從云平臺的選型到Docker的容器化魔法&#xff0c;再到Kubernetes的集群力量&#xff0c;每一步都充滿了奇幻色彩。文章以輕松幽默的筆觸&#xff0c;帶領讀者穿梭于現代應用部署的各個角落&#xff0c;探索自動化部署的奧秘&#xff0c;學…

關于圖像過曝問題的排查思路

1、問題背景 讀者提問&#xff0c;圖像在室外遇到過曝的問題&#xff0c;有什么排查思路和改善方法。 2、問題分析 1&#xff09;先檢查一下sensor驅動&#xff0c;對照 sensor datasheet 確認下最小曝光行設置的是否正確&#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…

PostgreSQL中有沒有類似Oracle的dba_objects系統視圖

PostgreSQL中有沒有類似Oracle的dba_objects系統視圖 在PostgreSQL中&#xff0c;沒有一個完全集成了所有對象信息的視圖&#xff08;類似于Oracle中的DBA_OBJECTS&#xff09;。但是&#xff0c;PostgreSQL提供了一些系統目錄表和視圖&#xff0c;可以用來獲取數據庫對象的信…

初探沁恒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;能夠對字符串進行查找、替換、分割等操作。 一、正則表達式的基本語法 正則表達式由普通字符和特殊字符組成。普通字符包括字母、數字和標點…

通過 echo 命令向 /sys/class/gpio/export 寫入一個GPIO編號,但遇到 “Device or resource busy

通過 echo 命令向 /sys/class/gpio/export 寫入一個GPIO編號&#xff0c;但遇到 "Device or resource busy" 錯誤時&#xff0c;這通常意味著該GPIO引腳已經被其他驅動或用戶空間程序導出并使用了。 要解決這個問題&#xff0c;可以嘗試以下步驟&#xff1a; 檢查GP…

SpEL表達式使用方法

1 SpEL簡介 SpEL&#xff08;Spring Expression Language&#xff09;是一種用于在Spring框架中進行數據綁定和執行業務邏輯的表達式語言。Spring EL提供了一種簡潔、靈活和強大的方式來訪問對象的屬性、調用方法、執行運算和邏輯判斷等操作。 官方文檔&#xff1a;https://d…

C# 多線程:并發編程的利器

在現今日益復雜的軟件開發環境中&#xff0c;多線程編程已經成為提升應用程序性能和響應速度的關鍵技術。C# 作為一種現代、功能強大的編程語言&#xff0c;提供了豐富的多線程支持&#xff0c;使開發者能夠充分利用多核處理器和并行計算的優勢。本文將深入探討C#中的多線程編程…

網絡協議三

數據中心 一、DNS 現在網站的數目非常多&#xff0c;常用的網站就有二三十個&#xff0c;如果全部用 IP 地址進行訪問&#xff0c;恐怕很難記住 根 DNS 服務器 &#xff1a;返回頂級域 DNS 服務器的 IP 地址 頂級域 DNS 服務器&#xff1a;返回權威 DNS 服務器的 IP 地址 …

匯凱金業:貴金屬交易規則有哪些

貴金屬投資目前非常火熱&#xff0c;許多投資者從中獲得了可觀的收益。新手投資者在進入貴金屬市場及其交易之前&#xff0c;務必要了解清楚貴金屬的交易規則。了解規則和差異能幫助新手更好地進行貴金屬投資交易。下面我們以現貨類貴金屬為例&#xff0c;詳細說明貴金屬的交易…