`
leonardleonard
  • 浏览: 801584 次
社区版块
存档分类
最新评论

利用.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。

希望文章能对大家有所补益和启发。 :)

分享到:
评论

相关推荐

    XML序列化与反序列化整理文档(12套)

    XML(eXtensible Markup ...通过理解和熟练掌握XML序列化与反序列化,开发者可以有效地在不同的系统和组件之间传递数据,从而提升软件的灵活性和互操作性。所提供的文档和代码实例是深入学习和实践这一技术的好资源。

    XmlDemoTranfer Xml序列化与反序列化

    总之,理解并熟练掌握C#中的Xml序列化与反序列化,能够帮助开发者更高效地与第三方系统交互,尤其在接口数据交换、配置文件存储和网络通信等方面有着广泛的应用。通过"XmlDemoTranfer"项目,你可以亲自动手实践,...

    ASP.NET XML Serializer

    熟练掌握XML序列化和反序列化,可以提升开发效率,同时在处理数据存储、网络通信等问题时提供强大的支持。在实际项目中,根据具体需求选择合适的序列化技术,例如XML、JSON或protobuf,是优化应用程序性能的关键。

    .NET Framework的另一个XML序列化库

    .NET Framework中的XML序列化是将对象的状态转换为XML格式的过程,反之亦然。这个过程对于数据交换、持久化和跨应用程序通信至关重要。YAXLib,全称Yet Another XML Serialization Library,是一个针对.NET ...

    ASP.NET XML with C# 源代码

    例如,XML配置文件(如Web.config)允许开发者配置应用程序的行为,而XML数据可以被序列化和反序列化为对象,便于在应用程序中存储和传递。 总结来说,"ASP.NET XML with C#"是一个涵盖XML文档操作、XPath和XSLT...

    C#中以PLCOpen为例子的XML序列化,反序列化的代码

    在.NET框架中,XML序列化和反序列化是将对象的状态转换为XML文档,以及将XML文档还原为等效对象的过程。这对于数据持久化、网络传输或者存储在XML格式的配置文件中非常有用。本例以C#语言为基础,结合PLCOpen标准,...

    XML序列化示例 XML

    在.NET框架中,XML序列化主要通过System.Xml.Serialization命名空间中的类来实现,如XmlSerializer。以下是一个简单的XML序列化示例: ```csharp using System; using System.IO; using System.Xml.Serialization; ...

    ASP.NET XML高级编程

    4. **XML序列化**:XML序列化是将对象的状态转换为XML的过程,常用于保存或传输数据。ASP.NET中的XmlSerializer类可以实现这个功能,使对象能够被序列化为XML格式的文件或流。 5. **XML Web Services**:ASP.NET...

    行业分类-设备装置-Net平台下基于属性标签和配置文件的Xml序列化模型实现方法.zip

    "行业分类-设备装置-Net平台下基于属性标签和配置文件的Xml序列化模型实现方法.zip"中的内容可能详细阐述了如何利用.NET框架的XML序列化功能来创建一个高效且可维护的设备配置系统。 XML序列化主要涉及到以下几个...

    ASP.NET XML高级编程-C#编程

    3. **数据序列化**:C#对象可以通过XML序列化转换为XML格式的文本,方便在网络间传输或者持久化存储。反之,也可以通过XML反序列化将XML数据转换回对象。 4. **LINQ to XML**:C#中引入的LINQ(Language Integrated...

    ASP.NET_XML深入编程技术

    总结来说,ASP.NET XML深入编程技术涵盖了从XML基础到高级应用的各个方面,包括XML的读写、处理、序列化、Web服务数据交换、配置管理以及与数据库的交互等。熟练掌握这些技能,能极大地提升你在ASP.NET开发中的灵活...

    XML和ADO.NET

    XML和ADO.NET之间的交互通常涉及XML数据的序列化和反序列化。例如,可以使用ADO.NET的SqlCommand对象从数据库检索数据,然后将结果集转换为XML格式。相反,也可以将XML文档解析到DataSet中,再通过DataAdapter将这些...

    ASP.NET操作XML

    5. **XML序列化**: ASP.NET也支持XML序列化,即将对象的状态转换为XML字符串的过程。`XmlSerializer`类用于实现这个功能,这在Web服务、数据持久化和跨系统通信中非常有用。相反,反序列化则是将XML数据转换回对象...

    ASP.NET_XML深入编程技术.rar

    5. **XML序列化和反序列化**:在ASP.NET中,XML序列化是将对象转换为XML字符串的过程,而反序列化则是相反的过程。这对于数据存储和传输非常有用。 6. **Web服务与SOAP**:ASP.NET支持创建SOAP(简单对象访问协议)...

    ASP.NET应用:DataSet 和XML(DataSet and XML)--vs2003

    5. **数据持久化**:可以通过XML序列化将DataSet保存到XML文件,或者反序列化回内存。 **XML** XML(eXtensible Markup Language)是一种标记语言,常用于结构化数据的存储和传输。在ASP.NET中,XML与DataSet的...

    Pro .NET 2.0 XML

    - **XML序列化**:通过使用System.Xml.Serialization命名空间中的工具,可以方便地将对象转换为XML格式,或者从XML文件中反序列化对象。这对于保存对象状态或在系统之间传输数据非常有用。 #### 4. 使用XML进行配置...

    教育科研-学习工具-Net平台下基于属性标签和配置文件的Xml序列化模型实现方法.zip

    本篇将深入探讨在.NET环境下,如何利用属性标签和配置文件实现Xml序列化模型。 首先,让我们了解什么是Xml序列化。Xml序列化是指将对象的公共属性和字段转换为XML文档的过程。这使得数据能够在不同的系统之间共享,...

    XML序列化 XML调用 位操作

    XML序列化是将对象的状态转换为XML文档的过程,这一过程对于数据存储、网络传输或配置文件的创建至关重要。XML(eXtensible Markup Language)因其结构化和可读性强的特点,广泛应用于各种软件开发中。在.NET框架中...

    在ASP.net中使用XML和Web服务

    另外,WCF中的行为配置(Behaviors)允许对服务的行为进行细粒度控制,如数据序列化、错误处理等。 总结起来,在ASP.NET中,XML提供了结构化数据交换的手段,而Web服务则实现了跨平台、跨系统的功能共享。两者结合...

Global site tag (gtag.js) - Google Analytics