通用XML讀寫和配置(二)

來源:互聯網
上載者:User

上一篇探討了通用的XML讀寫配置,有了一點改進,但還不夠通用,希望有一個類似“萬能工具類”的東西,能夠方便的對所有要儲存和配置的XML資料都進行讀寫,而且資料本身並不需要知道XML檔案的儲存細節。這看起來很不錯,但似乎又不太可能。後來想到了.Net的反射(Reflection),於是有了一個思路: 寫入XML檔案時,通過反射擷取資料對象的公有欄位資訊(FieldInfo)和欄位值,根據類名和欄位名自動構造XML節點結構,並儲存對應的值。讀取XML時,根據資料對象的欄位資訊來尋找對應的同名XML節點,並將該節點儲存的內容賦值給對應的欄位。

這樣一來,資料對象的定義不必再附加XML節點資訊,實現徹底與XML結構和儲存細節相脫離,資料類只要關心自身的職能和商務邏輯即可。繼續上一篇中的樣本,則類圖變化為:

有了這個“萬能工具類”XmlStorageHelper,我們就可以方便的把資料儲存到XML中並讀取出來,理論上這個資料可以是任何類型,甚至是一個數組對象。
範例程式碼如下:

 

代碼

XmlStorageHelper xmlHelper = new XmlStorageHelper();
//儲存對象到檔案
DataBase db = new DataBase();
xmlHelper.SaveToFile(db, "d:\\mytest.xml");
//從檔案中讀取資料
DataBase db2 = new DataBase();
xmlHelper.LoadFromFile(db2, "d:\\mytest.xml");
//將資料轉化為XML字串
string xmlStr = xmlHelper.ConvertToString(db2);

 

 

 

總結:
1.在工具類XmlStorageHelper的實現過程中,遇到並解決了以下幾個痛點:
A.欄位為自訂類型
B.欄位類型為數組或者集合類型
C.欄位類型為字典類型(Dictionary)
2.XmlStorageHelper只儲存非靜態公有欄位(Public)的值,不儲存其它存取權限的欄位。
3.XmlStorageHelper不儲存函數和屬性(Property),不管它們是否為Public。
4.目前基本支援Framework2.0裡的集合類型及其泛型,但如果使用自訂的集合類型(比如繼承自IList)可能會有問題,尚未驗證非常複雜的集合巢狀型別,比如List<List<Dictionary<int,string>>>這樣的複雜集合。

 

實現原始碼下載:XmlStorageHelper.cs

樣本工程下載:CommonXmlConfigV2.rar

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.