`
kinghmx
  • 浏览: 383 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

【转帖】用XStream实现序列化和反序列化xml的例子(class<->xml转换)

XML 
阅读更多

这些天要用到一些序列化相关知识,听人说XStream在序列化和反序列化xml方面很好,于是学了点他的api,写了个小例子:

 

先是一个用来序列化的类Parent:

package test.wei.tian.xstream;   
import java.util.List;   
import java.util.ArrayList;   
public class Parent {   
    private String name;   
    private String age;   
    private List<Son> sons=new ArrayList<Son>();   
    /*  
     * 写几个对应的getter和setter函数  
     */  
    public String getName(){   
        return name;   
    }   
    public void setName(String name)   
    {   
        this.name=name;   
    }   
    public String getAge(){   
        return age;   
    }   
    public void setAge(String age)   
    {   
        this.age=age;   
    }   
    public List getSons(){   
        return sons;   
    }   
    public void setSons(List sons){   
        this.sons=sons;   
    }   
}  

  他里面用到了Son类,Son类如下:

package test.wei.tian.xstream;   
  
public class Son {   
    public Son(String name, String grade) {   
        super();   
        this.name = name;   
        this.grade = grade;   
    }   
    public Son() {   
    }   
    private String name;   
    private String grade;   
    public String getName() {   
        return name;   
    }   
    public void setName(String name) {   
        this.name = name;   
    }   
    public String getGrade() {   
        return grade;   
    }   
    public void setGrade(String grade) {   
        this.grade = grade;   
    }   
  
       
}  

 

然后测试序列化以及反序列化:

package test.wei.tian.xstream;   
import java.util.ArrayList;   
import java.util.Iterator;   
import java.util.List;   
  
import com.thoughtworks.xstream.XStream;   
import com.thoughtworks.xstream.io.xml.DomDriver;   
public class TestXStream {   
    private String tempStr="";   
 public String testSerialized(){   
        XStream xs=new XStream();   
        Son son1=new Son();   
        son1.setGrade("88");   
        son1.setName("Tom");   
        Son son2=new Son();   
        son2.setGrade("95");   
        son2.setName("Lilei");   
           
        Parent parent=new Parent();   
        parent.setAge("42");   
        parent.setName("Toris");   
        //将定义的Son放到Parent的链表中   
        parent.getSons().add(son1);   
        parent.getSons().add(son2);   
        //给类取别名。要不然会出现,因为生成xml时会自动填充为类名   
        //<test.wei.tian.xstream.Parent>而不是parent   
        xs.alias("Parent", Parent.class);   
        xs.alias("Son", Son.class);   
        //将name,age设置为属性而不是子标记   
        xs.useAttributeFor(Parent.class, "name");   
        xs.useAttributeFor(Parent.class,"age");   
        //隐藏标记sons,因为Parent类有三个属性:name,age,sons。   
        //name和age都被设定为属性了,sons包括2个Son类型的变量.   
        //会出现<sons><Son><name>xxx</name></Son><sons>,这样看着   
        //有些多余,故而隐藏sons这个标签对。   
        xs.addImplicitCollection(Parent.class, "sons");   
        //用XStream对象xs调用toXML函数,将对象Parent转化为xml,此即序列化   
        tempStr=xs.toXML(parent);   
        //System.out.println(tempStr);   
        return tempStr;   
 }   
    
  
public void testDeserialized(){   
     String xml=testSerialized();   
     XStream xs=new XStream(new DomDriver());   
     Parent parent=new Parent();   
        
     xs.alias("Parent", Parent.class);   
     xs.alias("Son", Son.class);   
        
     xs.useAttributeFor(Parent.class,"name");   
     xs.useAttributeFor(Parent.class, "age");   
        
     xs.addImplicitCollection(Parent.class, "sons");   
     parent=(Parent)xs.fromXML(xml);   
     System.out.println("Parent name is: "+parent.getName());   
     System.out.println("Parent Age is: "+parent.getAge());   
     List<Son> sons=new ArrayList<Son>();   
     sons=parent.getSons();   
     Iterator<Son> it=sons.iterator();   
     System.out.println(parent.getName()+" has "+sons.size()+" sons");   
     System.out.println("They are:");   
     while(it.hasNext()){   
         Son son=(Son)it.next();   
         System.out.println(son.getName()+". His grade is "+son.getGrade());   
            
     }   
 }   
public static void main(String[]s){   
    TestXStream txs=new TestXStream();   
    String str=txs.testSerialized();   
    System.out.println("*****Serialized result********:");   
    System.out.println(str);   
    System.out.println("*****Deserialized result:******");   
    txs.testDeserialized();   
}   
}  

 

不过为了方便没有写入和读取文件,只是直接用了String,Deserilized用的是Serilized的结果。

 

结果是:

*****Serialized result********:   
<Parent name="Toris" age="42">  
  <Son>  
    <name>Tom</name>  
    <grade>88</grade>  
  </Son>  
  <Son>  
    <name>Lilei</name>  
    <grade>95</grade>  
  </Son>  
</Parent>  
*****Deserialized result:******   
Parent name is: Toris   
Parent Age is: 42   
Toris has 2 sons   
They are:   
Tom. His grade is 88   
Lilei. His grade is 95  

 

分享到:
评论

相关推荐

    XStream <--> Java 对象序列化为 XML 互换

    使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列...

    使用XStream序列化/反序列化对象

    XStream是一个强大的库,它允许开发者以XML格式进行序列化和反序列化Java对象。在这个场景中,我们将深入探讨如何使用XStream处理对象的序列化和反序列化。 首先,让我们了解什么是XStream。XStream是由Joe Walnes...

    使用xstream进行java类与xml文件互转解析--代码

    接下来,如果要从XML字符串反序列化回Java对象,可以使用XStream的`fromXML()`方法: ```java Person deserializedPerson = (Person) xstream.fromXML(xml); ``` XStream还可以处理复杂的对象结构,包括嵌套的对象...

    xstream实现xml和java bean 互相转换

    XStream:XStream是一个简单易用的Java库,用于序列化和反序列化对象。它可以将Java对象转换为XML文档,也可以将XML文档转换为Java对象。 pom引用 &lt;dependency&gt; &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; ...

    xstream对象与xml转换

    在Java编程语言中,XStream库提供了一个...其简洁的API和自动类型转换能力使得它在处理序列化和反序列化任务时非常高效。无论你是新手还是经验丰富的开发者,了解并掌握XStream都会对你的Java开发工作带来极大的便利。

    xStream转换xml和json源码

    xStream是一个轻量级的Java库,用于将Java对象序列化为XML,同时也能将XML反序列化回Java对象。这个强大的工具同样支持JSON格式,使得在Java应用程序中处理XML和JSON数据变得非常便捷。本篇文章将深入探讨xStream...

    使用XStream是实现XML与Java对象的转换(5)--Object Stream

    在Java开发中,数据序列化和反序列化是一项常见的任务,它允许我们将对象的状态转换为可以存储或传输的形式,然后再恢复。XStream是一个强大的库,它使得XML与Java对象之间的转换变得简单。在这个主题中,我们将深入...

    Bboss和xstream序列化反序列化性能对比1

    首先,Bboss和Xstream都提供了简单易用的API来实现序列化和反序列化。在测试中,我们观察了它们对特定数据结构的处理效率,这些数据结构包括基本类型(如int和String)、日期、数组、列表、映射、集合以及嵌套的对象...

    com.thoughtworks.xstream.XStream操作XML和java对象的一些用法

    XStream库提供了一个简单、直观的方式来实现这种转换,使得XML序列化和反序列化变得非常方便。本篇将详细介绍XStream如何处理XML与Java对象的相互转换,以及如何处理List、Map等集合类型的数据。 首先,XStream是一...

    使用XStream是实现XML与Java对象的转换(4)--转换器

    在Java开发中,数据序列化和反序列化是一项常见的任务,它允许我们将对象的状态转换为持久化的形式(如XML或JSON),以便存储或传输。XStream是一个强大的库,专门用于XML与Java对象之间的转换。本篇文章将深入探讨...

    xStream 实现xml与 java对象的转换

    这时,xStream库应运而生,它提供了一个简单、高效的API来实现XML与Java对象之间的序列化和反序列化。 xStream库的核心概念是“映射”,它通过创建一个映射关系,将Java对象与XML元素和属性对应起来。这使得我们...

    XStream对象序列化

    XStream对象序列化是一种在Java应用程序中将Java对象转换为XML格式的过程,这主要通过XStream库实现。这个库提供了一种简洁的方式来处理对象到XML的转换,反之亦然,而不需要复杂的配置或对对象进行特定的修改。...

    java 利用Xstream注解生成和解析xml

    Java中的Xstream库是一个强大的工具,它允许程序员方便地将Java对象序列化为XML和从XML反序列化回Java对象。这个过程对于数据交换、持久化或者创建XML配置文件非常有用。Xstream通过使用注解提供了高度的灵活性,...

    xstream实现实体类序列化转xml

    xstream-1.4.2.jar,xpp3_min-1.1.4.jar,xmlpull-1.1.3.1.jar 包括 //XML --&gt; JavaBean, //XML --&gt; JavaBean //JavaBean --&gt; JSON,//JSON--&gt; JavaBean

    XStream:Object与Xml字符串 互相转换

    XStream是一个强大的Java库,它允许开发者方便地将Java对象序列化为XML,同时也能将XML数据反序列化回对应的Java对象。这个过程对于数据存储、网络传输或者XML配置文件的处理非常有用。在处理多个同名子节点以及节点...

    使用XStream, java Object 与xml之间的转换,以及写入SD卡

    在Java开发中,数据序列化和反序列化是常见的需求,尤其在持久化存储或网络传输时。XStream是一款强大的库,它使得Java对象与XML之间的转换变得简单易行。本篇文章将深入探讨如何利用XStream进行Java对象到XML的转换...

    使用XStream是实现XML与Java对象的转换(6)--持久化

    通过使用XStream,开发者可以轻松地实现对象的序列化和反序列化,从而实现数据的持久化存储。在实际项目中,这不仅可以简化数据交换,还可以方便数据备份和恢复,增强了软件的可维护性和可靠性。

    xstream反序列化流程分析1

    在本文中,我们将深入探讨XStream库的反序列化流程,这是一个流行的Java库,用于将XML数据转换为Java对象和反之亦然。XStream的反序列化过程涉及到多个步骤,从接收XML字符串到最终创建Java对象。以下是详细的分析:...

    Java用xStream拼接xml

    Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream是一个开源的Java库,由Johannes Link创建。它提供了简洁、直观的API来处理XML...

    XStream解析xml 转换成对象案例

    XStream通过映射XML节点到Java类的字段来实现对象的序列化和反序列化。这意味着你需要定义一个Java类,该类的字段对应于XML文档中的元素。XStream会自动处理这个映射过程,无需编写复杂的DOM或SAX解析代码。 下面是...

Global site tag (gtag.js) - Google Analytics