日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

利用.NET的XML序列化解决系统配置问题

發布時間:2023/11/27 生活经验 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用.NET的XML序列化解决系统配置问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:未知? 請作者速與本人聯系? 出自: http://blog.csdn.net/ycl111/

在Web系統開發中,我們經常需要讀取和設置一些系統配置項,常見的例如數據庫連接字符串、上傳路徑等等。

在最初的ASP系統中,比較常用的方法是將值保存為Application或Session變量;在Asp.net系統中,目前比較常見的簡單方法是把相應的配置項寫入Web.Config中,例如

<?xml version="1.0" encoding="utf-8" ?>
<configuration><system.web>...</system.web><appSettings><add key="ConnectionString" value="server=(local);database=dbname;uid=username;pwd=password"/></appSettings>
</configuration>

然后在程序中通過如下方式讀取

string connString = ConfigurationSettings.AppSettings["ConnectionString"];


這種方法在系統規模較小復雜度較低的時候也不失為一種簡單明了的輕量級方法,不過如果系統較復雜,配置項會較多,同時我們需要按不同模塊對配置進行劃分,并且還希望能以面向對象方法來對其進行封裝,那么如果仍然采用這種過于簡化方式就不太合時宜了。

-----------------------------------------------------------------

下面,我講述一下通過XML類序列化解決系統配置問題的方法。

關于XML類序列化和反序列化(另外一種描述是串行化和并行化)的技術細節,大家可以查看MSDN了解;這里簡單講兩句,XML序列化是把一個對象序列化到XML文檔的過程,反序列化則是從XML輸出中重新創建原始狀態的對象。

直觀表現就是如下圖模式


看了這個圖,就很清楚了,通過序列化,可以采用面向對象的方法,非常自然和方便的讀取和設置系統配置;.NET Framework承擔了對象和XML文件映射工作,我們只需要簡單的使用就OK。下面我們講一下具體內容。

上面圖示已經表明,首先需要一個XML配置文件,格式內容如上圖,具體配置項可以自行增減。

然后我們需要編寫一個類,如上圖所示;特殊的一點,為了使類能夠實現XML序列化,需要在類的所有屬性聲明前添加屬性信息XmlElement,如下所示。

[XmlElement]
public string ConnectionString
{get { return connectionString; }set { connectionString = value; }
}

由于AppConfig類本身沒有實現方法,因此我們需要一個配置類AppConfigSetting.cs。類的結構很簡單,只需要兩個靜態方法,Get()獲取AppConfig對象,Save()保存AppConfig對象。

另外,我們需要在 Web.Config中添加該XML配置文件的地址。

<appSettings><add key="AppConfigPath" value="/FilePath/file.config"/>
</appSettings>

public class AppConfigSetting
{//獲取配置對象public static AppConfig Get(){//嘗試獲取緩存中的對象AppConfig config = (AppConfig)HttpContext.Current.Cache["AppConfig"];//如果緩存中沒有該配置對象,則直接獲取對象if (config == null){//新建序列化對象并指定其類型XmlSerializer serial = new XmlSerializer(typeof(AppConfig));try{string file = HttpContext.Current.Server.MapPath(GetFile());//讀取文件流FileStream fs = new FileStream(file, FileMode.Open);//文件流反序列化為對象config = (AppConfig)serial.Deserialize(fs);fs.Close();//將對象加入到緩存中HttpContext.Current.Cache.Insert("AppConfig", config, new CacheDependency(file));}catch (System.IO.FileNotFoundException){config = new AppConfig();}}return config;}//保存配置對象public static void Save(AppConfig config){string file = HttpContext.Current.Server.MapPath(GetFile());XmlSerializer serial = new XmlSerializer (typeof(AppConfig));FileStream fs = new FileStream(file, FileMode.Create);//對象序列化為文件serial.Serialize(fs, config);fs.Close();}//獲取配置文件路徑private static string GetFile(){string path = (string)HttpContext.Current.Cache["FilePath"];if (path == null){path=ConfigurationSettings.AppSettings["AppConfigPath"];HttpContext.Current.Cache["FilePath"] = path;}return path;}
}


類的使用非常簡單,基本方式如下

//代碼僅為使用演示
AppConfig config = AppConfigSetting.Get();
string connString = config.ConnectionString;
...
config.ConnectionString = connString;
AppConfigSetting.Save(config);

看到這樣的代碼,不禁有令人賞心悅目之感;相對于原來的直接讀取AppSetting,可謂解脫矣! :)


OK,就此結束了。這篇文章只涉及對象序列化的非常簡單的應用,沒有涉及太多的技術原理和細節,大家要深入了解請參考MSDN。

希望文章能對大家有所補益和啟發。 :)

總結

以上是生活随笔為你收集整理的利用.NET的XML序列化解决系统配置问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。