亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

利用.NET的XML序列化解決系統(tǒng)配置問題

系統(tǒng) 2202 0
作者:未知 請作者速與本人聯(lián)系 出自: http://blog.csdn.net/ycl111/

在Web系統(tǒng)開發(fā)中,我們經(jīng)常需要讀取和設(shè)置一些系統(tǒng)配置項,常見的例如數(shù)據(jù)庫連接字符串、上傳路徑等等。

在最初的ASP系統(tǒng)中,比較常用的方法是將值保存為Application或Session變量;在Asp.net系統(tǒng)中,目前比較常見的簡單方法是把相應(yīng)的配置項寫入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"];

              


這種方法在系統(tǒng)規(guī)模較小復(fù)雜度較低的時候也不失為一種簡單明了的輕量級方法,不過如果系統(tǒng)較復(fù)雜,配置項會較多,同時我們需要按不同模塊對配置進行劃分,并且還希望能以面向?qū)ο蠓椒▉韺ζ溥M行封裝,那么如果仍然采用這種過于簡化方式就不太合時宜了。

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

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

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

直觀表現(xiàn)就是如下圖模式


看了這個圖,就很清楚了,通過序列化,可以采用面向?qū)ο蟮姆椒ǎ浅W匀缓头奖愕淖x取和設(shè)置系統(tǒng)配置;.NET Framework承擔(dān)了對象和XML文件映射工作,我們只需要簡單的使用就OK。下面我們講一下具體內(nèi)容。

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

然后我們需要編寫一個類,如上圖所示;特殊的一點,為了使類能夠?qū)崿F(xiàn)XML序列化,需要在類的所有屬性聲明前添加屬性信息XmlElement,如下所示。

                [XmlElement]

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

              

由于AppConfig類本身沒有實現(xiàn)方法,因此我們需要一個配置類AppConfigSetting.cs。類的結(jié)構(gòu)很簡單,只需要兩個靜態(tài)方法,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,就此結(jié)束了。這篇文章只涉及對象序列化的非常簡單的應(yīng)用,沒有涉及太多的技術(shù)原理和細節(jié),大家要深入了解請參考MSDN。

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

利用.NET的XML序列化解決系統(tǒng)配置問題


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 九九亚洲精品 | 欧美性xxxx偷拍| 精品亚洲无人区一区二区 | 最新毛片久热97免费精品视频 | 免费四虎永久在线精品 | 国产福利观看 | 久久网在线 | 国产九九热| 在线观看国产精品入口 | 亚洲精品综合欧美一区二区三区 | 成人免费久久精品国产片久久影院 | 亚洲成年人在线 | 四虎成人精品 | 欧美人与性动交α欧美精品图片 | 国产成人亚洲精品乱码在线观看 | 免费一级特黄欧美大片勹久久网 | 免费观看成人毛片 | 日韩精品免费一区二区 | 亚洲综合在线视频 | 亚洲国产第一区二区香蕉 | 午夜视频网 | 色悠综合 | 日本一区二区中文字幕 | 亚洲国产欧洲综合997久久 | 激情网址大全 | 成人免费网站久久久 | 青青国产成人久久激情911 | 精品午夜寂寞影院在线观看 | 久久国产精品2020盗摄 | 欧美日韩亚洲无线码在线观看 | 成人在线视频免费 | 中文字幕福利视频 | 午夜看一级特黄a大片黑 | 成人久久18免费网站 | 久青草免费视频手机在线观看 | 色网址在线观看 | 亚洲黄色录像 | 亚洲综合图片人成综合网 | 麻豆国产高清精品国在线 | 99热久久国产这里是精品 | 中文字幕在线视频免费 |