六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

使用.NET的XML序列化處理系統設置問題

[摘要]在Web系統開發中,我們經常需要讀取和設置一些系統配置項,常見的例如數據庫連接字符串、上傳路徑等等。在最初的ASP系統中,比較常用的方法是將值保存為Application或Session變量;在Asp.net系統中,目前比較常見的簡單方法是把相應的配置項寫入Web.Config中,例如<?x...
在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。

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



主站蜘蛛池模板: 中文字幕不卡在线高清 | 日韩免费一级毛片 | 亚洲视频免费看 | 色姝姝影院 | 亚洲精品视频在线播放 | 日本免费一区视频 | 中文天堂在线最新2022更新 | 天天综合网天天综合色不卡 | 素人天堂| 色综合久久综合欧美综合 | 亚洲人成在线观看男人自拍 | 日本视频在线观看免费 | 伊人直 | 五月婷婷激情四射 | 亚洲天堂男人 | 日本欧美一区二区三区在线观看 | 最近更新免费韩国视频 | 亚洲成人资源 | 婷婷综合激六月情网 | 日韩一及片| 日韩精品手机在线 | 五月开心激情网 | 日本在线观看视频 | 亚洲天堂久久 | 色羞羞| 色视频亚洲 | 亚洲国产日韩综合久久精品 | 午夜高清视频在线观看 | 中文字幕资源在线 | 青草视频在线观看完整版 | 性生免费视频 | 日韩午夜 | 亚洲欧美在线一区二区 | 欧美亚洲精品在线 | 自偷自偷自亚洲首页精品 | 天天综合网色 | 午夜久久久久久网站 | 青娱乐极品在线 | 热久久国产欧美一区二区精品 | 亚洲精品第一页中文字幕 | 天天色天天综合网 |