环境:VS2013,.Net Framework 4
XML反序列化
我有一个Config类,使用单例模式,里面有一些静态字段用以保存程序的相关配置信息,有一些成员字段作为辅助。我需要将其中的静态字段保存成文件,通常可以将其序列化存储为XML或者JSON格式的文本文件,我选择的是XML文件,由于配置项比较少,保存和加载时性能要求低,所以选哪个都差不多。
序列化的实现就不赘述了。
当程序启动时,会寻找XML配置文件,如果存在则加载其中的配置,否则使用程序中hard-coded的配置。
加载配置主要是读取该XML文件中的节点内容并将其赋值给Config类中相应的静态字段。主要使用了反射,先找出Config类中的私有静态字段的集合,然后遍历该集合,对每一个字段,找出其在XML文档中的值字符串,将值字符串转换为该字段的类型数据,再给该字段赋值即可。代码如下。
Enum字段的处理
上面的代码在处理枚举字段时会抛出无效转换的异常。我定义的枚举如下:
看了下FieldInfo的文档,它有个BaseType属性,表示该字段数据类型直接继承的类型,对于枚举引用,它的BaseType为Enum,这个可以将其和其他类型对象区分开来。改进之后的LoadGenericStaticXml方法代码如下。