技术开发 频道

.NET中读写config文件的各种方法解析

  在XML序列化时,有个XmlWriterSettings是用于控制写XML的一些行为的,它有一个OmitXmlDeclaration属性,就是专门用来控制要不要输出那行XML声明的。而且,这个XmlWriterSettings还有其它的一些常用属性。请看以下演示代码:

using( MemoryStream stream = new MemoryStream() ) {
    XmlWriterSettings settings
= new XmlWriterSettings();
    settings.Indent
= true;
    settings.NewLineChars
= "\r\n";
    settings.OmitXmlDeclaration
= true;
    settings.IndentChars
= "\t";

    XmlWriter writer
= XmlWriter.Create(stream, settings);

   使用上面这段代码,我可以:

  ①不输出XML声明。

  ②指定换行符。

  ③指定缩进字符。

  如果不使用这个类,恐怕还真的不能控制XmlSerializer.Serialize()的行为。 

  前面介绍了读写XML的方法,可是,如何开始呢? 由于没有XML文件,程序也没法读取,那么如何得到一个格式正确的XML呢?答案是:先写代码,创建一个要读取的对象,随便输入一些垃圾数据,然后将它写入XML(反序列化),然后,我们可以参考生成的XML文件的具体格式,或者新增其它的节点(列表),或者修改前面所说的垃圾数据,最终得到可以使用的,有着正确格式的XML文件。

  配置参数的建议保存方式

  经常见到有很多组件或者框架,都喜欢把配置参数放在config文件中,那些设计者或许认为他们的作品的参数较复杂,还喜欢搞自定义的配置节点。结果就是:config文件中一大堆的配置参数。最麻烦的是:下次其它项目还要使用这个东西时,还得继续配置!

  .net一直提倡XCOPY,但我发现遵守这个约定的组件或者框架还真不多。所以,我想建议大家在设计组件或者框架的时候:

  请不要把你们的参数放在config文件中,那种配置真的不方便【复用】。

  能不能同时提供配置文件以及API接口的方式公开参数,由用户来决定如何选择配置参数的保存方式。

  config文件与XML文件的差别

  从本质上说,config文件也是XML文件,但它们有一点差别,不仅仅是因为.net framework为config文件预定义了许多配置节。对于ASP.NET应用程序来说,如果我们将参数放在web.config中,那么,只要修改了web.config,网站也将会重新启动,此时有一个好处:我们的代码总是能以最新的参数运行。另一方面,也有一个坏处:或许由于种种原因,我们并不希望网站被重启,毕竟重启网站会花费一些时间,这会影响网站的响应。对于这个特性,我只能说,没有办法,web.config就是这样。

  然而,当我们使用XML时,显然不能直接得到以上所说的特性。因为XML文件是由我们自己来维护的。

  到这里,您有没有想过:我如何在使用XML时也能拥有那些优点呢?

  我希望在用户修改了配置文件后,程序能立刻以最新的参数运行,而且不用重新网站。

        代码下载:所有示例代码可以点击此处下载

0
相关文章