通用XML读写和配置(二)

上一篇探讨了通用的XML读写配置,有了一点改进,但还不够通用,希望有一个类似“万能工具类”的东西,能够方便的对所有要保存和配置的XML数据都进行读写,而且数据本身并不需要知道XML文件的保存细节。这看起来很不错,但似乎又不太可能。后来想到了.Net的反射(Reflection),于是有了一个思路: 写入XML文件时,通过反射获取数据对象的公有字段信息(FieldInfo)和字段值,根据类名和字段名自动构造XML节点结构,并存储对应的值。读取XML时,根据数据对象的字段信息来查找对应的同名XML节点,并将该节点存储的内容赋值给对应的字段。

这样一来,数据对象的定义不必再附加XML节点信息,实现彻底与XML结构和存储细节相脱离,数据类只要关心自身的职能和业务逻辑即可。继续上一篇中的示例,则类图变化为:

2010062016541064.jpg

有了这个“万能工具类”XmlStorageHelper,我们就可以方便的把数据保存到XML中并读取出来,理论上这个数据可以是任何类型,甚至是一个数组对象。
示例代码如下:

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
XmlStorageHelper xmlHelper = new XmlStorageHelper();
// 保存对象到文件
DataBase db = new DataBase();
xmlHelper.SaveToFile(db,
" d:\\mytest.xml " );
// 从文件中读取数据
DataBase db2 = new DataBase();
xmlHelper.LoadFromFile(db2,
" d:\\mytest.xml " );
// 将数据转化为XML字符串
string xmlStr = xmlHelper.ConvertToString(db2);

 

 

 

总结:
1.在工具类XmlStorageHelper的实现过程中,遇到并解决了以下几个难点:
A.字段为自定义类型
B.字段类型为数组或者集合类型
C.字段类型为字典类型(Dictionary)
2.XmlStorageHelper只保存非静态的公有字段(Public)的值,不保存其它访问权限的字段。
3.XmlStorageHelper不保存函数和属性(Property),不管它们是否为Public。
4.目前基本支持Framework2.0里的集合类型及其泛型,但如果使用自定义的集合类型(比如继承自IList)可能会有问题,尚未验证非常复杂的集合嵌套类型,比如List<List<Dictionary<int,string>>>这样的复杂集合。

 

实现源代码下载:XmlStorageHelper.cs

示例工程下载:CommonXmlConfigV2.rar

转载于:https://www.cnblogs.com/qingteng1983/archive/2010/06/20/1761437.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值