在XML序列化时,有个XmlWriterSettings是用于控制写XML的一些行为的,它有一个OmitXmlDeclaration属性,就是专门用来控制要不要输出那行XML声明的。而且,这个XmlWriterSettings还有其它的一些常用属性。请看以下演示代码:
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时也能拥有那些优点呢?
我希望在用户修改了配置文件后,程序能立刻以最新的参数运行,而且不用重新网站。
代码下载:所有示例代码可以点击此处下载