使用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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...