使用Wesky.Net.Opentools庫,一行代碼實現自動解析實體類summary註釋信息(可用於數據實體文檔的快速實現)

来源:https://www.cnblogs.com/weskynet/p/18236082
-Advertisement-
Play Games

使用前,需要對你的項目勾選輸出api文檔文件。 引用Wesky.Net.OpenTools包,保持1.0.11版本或以上。 為了方便,我直接在昨天的演示基礎上,繼續給實體類添加註釋。 昨天的演示文章可參考: C#/.NET一行代碼把實體類類型轉換為Json數據字元串 https://mp.weixi ...


使用前,需要對你的項目勾選輸出api文檔文件。 0 引用Wesky.Net.OpenTools包,保持1.0.11版本或以上。 0   為了方便,我直接在昨天的演示基礎上,繼續給實體類添加註釋。 昨天的演示文章可參考: C#/.NET一行代碼把實體類類型轉換為Json數據字元串 https://mp.weixin.qq.com/s/nVcURD0lf5-AQOVzwHqcxw 對實體類添加註釋: 0 然後傳入實體類型,即可獲取到類型數據集合: 0 運行一下看下效果: 0 以上只是簡單演示,你也可以用來快速生成實體類說明文檔。例如通過反射,獲取所有類型,然後進行代入,解析出每個類型裡面的屬性以及註釋,直接就是你的一個演示文檔了。 解析部分核心代碼:  
  /// <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數據字元串 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版本環境,均可直接引用。   再次感謝各位閱讀~~~     歡迎加入QQ群: 群號:1079830632 WeskyNet交流群
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • V1.0 2024年6月5日 發佈於博客園 目錄理論代碼伺服器端客戶端 理論 伺服器端先運行, 能夠接收來自任何地方的多個客戶端發起的指向特定埠(這裡是50002)的TCP請求, 並和客端建立穩定的TCP連接. 沒有連接請求時等待, 有連接後先來後到的原則, 依次服務, 能夠相互通信. 當客戶端結 ...
  • C-11.資料庫的設計規範 1.為什麼需要資料庫設計 我們在設計數據表的時候,要考慮很多問題。比如: 用戶需要什麼數據?需要在數據表中保存那些數據? 如何保證數據表中數據的正確性,當插入,刪除,更新的時候該進行怎樣的約束檢查? 如何降低數據表的數據冗餘度,保證數據表不會因為用戶量的增長而迅速擴張? ...
  • 在 ListNode dummy(0);ListNode* cur = &dummy; 中,& 是取地址運算符,用來獲取變數 dummy 的地址。具體如下: ListNode dummy(0);:創建了一個類型為 ListNode 的對象 dummy,其值初始化為 0。 &dummy:取 dummy ...
  • 最近又開始準備LLM 應用開發,要用到api key,才發現過我之前免費發放的額度沒了!我都沒咋用過,痛心! 現在 OpenAI 有要求必須充值 5 刀才能使用,問就是沒錢! 想著能不能在網上白嫖到共用api key。終於發現GitHub聖地的項目,拿來就用! 項目地址 直接點擊訪問。 ...
  • NumPy的通用函數(ufunc)提供高性能的逐元素運算,支持向量化操作和廣播機制,能應用於數組的數學、邏輯和比較運算。ufunc可提高計算速度,避免低效的迴圈,並允許自定義函數以滿足特定需求。例如,ufunc實現加法比迴圈更高效。通過`frompyfunc`可創建自定義ufunc。判斷函數是否為u... ...
  • 用udp協議傳輸文件 目錄用udp協議傳輸文件頭文件/巨集定義客戶端伺服器 頭文件/巨集定義 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <netinet/in.h> ...
  • 垃圾收集器 簡述 Java 垃圾回收機制 在 java 中,程式員是不需要顯示的去釋放一個對象的記憶體的,而是由虛擬機自行執行。在 JVM 中,有一個垃圾回收線程,它是低優先順序的,在正常情況下是不會執行的,只有在虛擬機空閑或 者當前堆記憶體不足時,才會觸發執行,掃面那些沒有被任何引用的對象,並將它們添加 ...
  • 隨著軟體項目進入“維護模式”,對可讀性和編碼標準的要求很容易落空(甚至從一開始就沒有建立過那些標準)。然而,在代碼庫中保持一致的代碼風格和測試標準能夠顯著減輕維護的壓力,也能確保新的開發者能夠快速瞭解項目的情況,同時能更好地全程保持應用程式的質量。 使用外部庫來檢查代碼的質量不失為保護項目未來可維護 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...