zhuweisky

君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。

ESFramework,基于.NET的通信框架。DataRabbit,轻量的数据访问框架。sky.zhuwei@163.com
posts - 185, comments - 1262, trackbacks - 87, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

自动化 object <-> xml

Posted on 2007-03-02 08:52 zhuweisky 阅读(2452) 评论(5)  编辑 收藏 所属分类: C#专栏

   .NET提供了Soap序列化的方式可以实现 object <-> xml ,但是它有三个缺点:
(1)它要求object 必须打上[Serializable]标签,这是强侵入性的。
(2).NET的Soap序列化与程序集的版本紧密关联,如果object的class定义没有发生变化,而定义该class的程序集版本发生了变化,那么反序列化(xml->object)可能就会失败。
(3).NET的Soap序列化得到的xml中带有太多对我们来说无关紧要的信息,这使得xml结果的个头很大。

   ESBasic.Configuration.SpringFox类提供了更加灵活的 object <-> xml 自动化实现。SpringFox 用于将object 与 xml字符串相互转换。XML大纲遵循Spring.net的object配置大纲。
   (1)将转换object的类型的所有属性。
   (2)除了支持IList<>,将忽略其它集合和数组类型的属性。
   (3)可以转换内嵌的自定义简单类型,但不支持循环对象引用。

   下面是SpringFox类的类图。

   应用SpringFox的一个非常有用的场合就是配置文件(xml)与配置object之间的相互转换,有了SpringFox,我们不需要在手动打造解析和生成配置文件了。ESBasic.Configuration.AgileConfiguration类借助SpringFox封装好了这些功能,你的配置object只要从AgileConfiguration继承,就可以拥有自动化与XML之间同步信息的功能。

   静态的AgileConfiguration.Load 将读取XML配置文件并返回对应的配置Object,Save方法将当前的配置object保存到目标xml文件。
   比如我们的配置object的class定义如下,

    public class AppConfiguration : AgileConfiguration
    {
        
#region Port
        
private int port = 6600;
        
public int Port
        {
            
get { return port; }
            
set { port = value; }
        } 
        
#endregion

        
#region ServerName
        
private string serverName = "";
        
public string ServerName
        {
            
get { return serverName; }
            
set { serverName = value; }
        } 
        
#endregion

        
#region Url
        
private string url;
        
public string Url
        {
            
get { return url; }
            
set { url = value; }
        } 
        
#endregion
    }

   转换该类型的某个object成xml后的结果如下所示:

<object type="XmlFoxTest.AppConfiguration,XmlFoxTest">
  
<property name="Port" value="6600" />
  
<property name="ServerName" value="AppliactionSystem" />
  
<property name="Url" value="http://www.springframework.net/" />
</object>

   最后给出一个使用ESBasic.Configuration.AgileConfiguration来进行配置的应用程序的例子,可以点击这里下载,运行一下例子,并研究一下源码,
你就知道如何使用ESBasic.Configuration.SpringFox和ESBasic.Configuration.AgileConfiguration了。ESBasic.dll可以从下载的源码的文件夹中获得。

Feedback

#1楼    回复  引用  查看    

2007-03-02 10:45 by 布尔      
不错,简单化了

#2楼    回复  引用  查看    

2007-03-02 11:23 by yunhuasheng      
very good!

#3楼    回复  引用  查看    

2007-03-02 18:51 by 风云      
不错,非侵入性!

#4楼    回复  引用  查看    

2007-03-02 20:57 by JesseZhao      
非侵入性万岁

#5楼    回复  引用    

2007-03-05 01:34 by ljgzt [未注册用户]
版主是要吧spring玩死挖

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接:

历史上的今天:
2006-03-02 AgileIM 即时通