遵循Spring大纲的XML(反)序列化 SpringFox --ESBasic 可复用的.NET类库(27)

简介: (题外话:前面连续N篇介绍都是一些应用比较复杂的类,这篇来个简单易懂的) 1.缘起:      .NET Framework提供的Soap序列化的方式可以实现对象的xml序列化和反序列化(object xml) ,但是它有三个缺点: (1)     它要求对象的类型定义时必须打上[Serializable]标签,这是强侵入性的。

(题外话:前面连续N篇介绍都是一些应用比较复杂的类,这篇来个简单易懂的)

1.缘起:

     .NET Framework提供的Soap序列化的方式可以实现对象的xml序列化和反序列化(object <=> xml ,但是它有三个缺点:

(1)     它要求对象的类型定义时必须打上[Serializable]标签,这是强侵入性的。

(2)     .NETSoap序列化与程序集的版本紧密关联,如果对象的类型定义没有发生变化,而仅仅是定义该类型的程序集版本发生了变化,那么反序列化(xml=>object)就可能失败。

(3)     采用.NET自带的Soap序列化得到的xml中带有太多对我们应用来说无关紧要的信息,这使得xml结果的个头很大。 

     ESBasic.Persistence.SpringFox类提供了更加灵活的 object <-> xml 自动化实现。SpringFox 用于将object xml字符串相互转换,且XML大纲遵循Spring.netobject配置大纲。

 

2.适用场合:

(1)     需要将一个对象xml后进行保存或传输,并在以后需要时,能依据xml还原这个对象。

(2)     目标对象的类型定义相对简单,比如,没有循环引用,没有复杂的集合类型。

(3)     可以用于应用程序的配置信息的保存与读取。

(4)     可以自动生成对象的spring配置文本。

 

3.设计思想与实现

      SpringFox的类图如下所示:

  

    其主要提供了两个静态方法,XmlObject方法用于将对象转换为xml字符串以完成序列化的过程,而ObjectXml方法则用于将xml字符串还原为对象以完成反序列化。SpringFox主要使用了反射技术和xml技术,相对简单,关于其实现细节可直接参考源码。

    有一点要注意的是NonXmlAttribute这个特性,定义这个特性的目的与.NET自带的NonSerializable特性的目的是一样的,如果某个对象的某个Property不希望被SpringFox进行xml序列化,则可以为该Property打上NonXmlAttribute标签。

 

4. 使用时的注意事项

(1)     SpringFox将转换object的类型的所有没有被NonXmlAttribute修饰的属性。前提是,目标属性必须是可读的(getter)。

(2)     当前版本仅支持IList<>/ List<>集合类型,转换时将忽略其它集合和数组类型的属性。

(3)     可以转换内嵌的自定义简单类型,但不支持循环对象引用。

 

5.扩展

 SpringFox一个非常有用的场合就是应用程序的配置文件(xml)与配置object之间的相互转换,有了SpringFox,我们不需要在手动打造解析和生成配置文件了。

 ESBasic.Persistence.AgileConfiguration类借助SpringFox封装好了这些功能,你的配置object的类型只要从AgileConfiguration继承,就可以自动拥有与XML之间同步信息的功能。

    public   abstract   class   AgileConfiguration
    {
        
///   <summary>
        
///  Load 将XML配置文件中的内容转换为Object
        
///   </summary>         
         public   static   AgileConfiguration  Load( string  configFilePath)
        {
            XmlDocument doc 
=   new  XmlDocument();
            doc.Load(configFilePath);

            
return  ( AgileConfiguration )SpringFox.ObjectXml(doc.ChildNodes[ 0 ].OuterXml);
        }

        
///   <summary>
        
///  Save 将当前配置保存到目标xml文件
        
///   </summary>    
         public   void  Save( string  configFilePath)
        {
            
string  xml  =  SpringFox.XmlObject( this );
            FileHelper.GenerateFile(configFilePath, xml);
        }
    }

 

AgileConfiguration.Load静态方法将读取目标XML配置文件的内容,并返回对应的配置Object,返回类型为AgileConfiguration,你可以向下强转为你自己的配置类型;Save方法将当前的配置object保存到目标xml文件。

 比如我们应用程序的配置object的类型定义如下: 

    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
    }

 

 转换该类型的某个配置对象到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 >

 

 最后提一下,如果能再结合PropertyGrid控件,将配置的对象绑定到PropertyGrid,就可以很方便的实现图形化的配置管理了。

 

 

注: ESBasic已经开源,点击这里下载源码。
    
ESBasic开源前言

 

 

 

 

目录
相关文章
|
1月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
80 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
2月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
45 1
|
3月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
2月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
206 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
2月前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
spring复习02,xml配置管理bean
|
1月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
79 0
|
3月前
|
XML Java 数据格式
Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)
这篇文章详细介绍了Spring框架中IOC容器的Bean管理,特别是基于XML配置方式的实现。文章涵盖了Bean的定义、属性注入、使用set方法和构造函数注入,以及如何注入不同类型的属性,包括null值、特殊字符和外部bean。此外,还探讨了内部bean的概念及其与外部bean的比较,并提供了相应的示例代码和测试结果。
Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)
|
3月前
|
XML Java 数据格式
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
这篇文章是Spring5框架的实战教程,主题是IOC容器中Bean的集合属性注入,通过XML配置方式。文章详细讲解了如何在Spring中注入数组、List、Map和Set类型的集合属性,并提供了相应的XML配置示例和Java类定义。此外,还介绍了如何在集合中注入对象类型值,以及如何使用Spring的util命名空间来实现集合的复用。最后,通过测试代码和结果展示了注入效果。
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
|
3月前
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
|
3月前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)

热门文章

最新文章