`
fortianwei
  • 浏览: 60906 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

用XStream实现序列化和反序列化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序列化/反序列化对象

    // 反序列化XML字符串回Person对象 Person deserializedPerson = (Person) xstream.fromXML(xml); // 检查反序列化的对象是否与原始对象一致 System.out.println(deserializedPerson.getName() + ", " + ...

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

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

    XStream对象序列化

    以下是如何使用XStream进行序列化和反序列化的简单步骤: 1. **序列化对象**: 为了序列化对象,你需要创建一个`XStream`实例,然后使用`toXML`方法将对象转换为XML字符串。例如,在`Writer`类中,可以创建一个`...

    xstream-1.1.3正反序列化JAVA对象

    5. 反序列化XML:如果有一个XML字符串,你可以通过调用`fromXML()`方法将其转换回Java对象。 ```java String xml = ... // 之前序列化的XML字符串 XStream xstream = new XStream(); Person deserializedPerson = ...

    xstream序列化与反序列化

    xstream中xml与javaBean的互转

    基于 Java 的亿赛通电子文档安全管理系统XStream反序列化漏洞任意文件上传利用

    【作品名称】:基于 Java 的亿赛通电子文档安全管理系统XStream反序列化漏洞任意文件上传利用 【适用人群】:适用于希望学习不同... -e,--encode &lt;arg&gt; 加密XML反序列化payload -h,--help 打印帮助信息 -p,--proxy

    xstream反序列化流程分析1

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

    xStream 实现xml与 java对象的转换

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

    使用 XStream 把 Java 对象序列化为 XML

    在提供的压缩包中,`sample.xml`可能是使用XStream序列化后的Java对象示例,而`src`目录可能包含了相关的Java源代码,供学习和参考。通过研究这些文件,你可以更深入地理解XStream的工作原理和使用方式。

    Java用xStream拼接xml

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

    xStream转换xml和json源码

    xStream是一个轻量级的Java库,用于将Java对象序列化为XML,同时也能将XML反序列化回Java对象。这个强大的工具同样支持JSON格式,...通过理解和掌握xStream的使用,开发者可以更高效地处理数据序列化和反序列化任务。

    android XML简单序列化

    5. **反序列化XML到Java对象**:将XML字符串转换回`Person`对象。 ```java try { Person deserializedPerson = mapper.readValue(xmlString, Person.class); Log.d("XMLDeserialization", "Name: " + ...

    xstream解析xml

    在压缩包中的"xml"文件可能是示例的XML数据,用于演示如何使用XStream进行序列化和反序列化操作。实际应用中,开发者可以根据这些知识对XML数据进行读取、解析和存储,提升开发效率和代码可读性。

    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是实现XML与Java对象的转换(6)--持久化

    总的来说,“使用XStream是实现XML与Java对象的转换(6)--持久化”这个主题涵盖了如何使用XStream进行对象的持久化操作,包括创建XStream实例、序列化和反序列化,以及文件I/O操作。了解这些知识点对于需要在Java项目...

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

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

    XStream XML与Json转换

    XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。 在缺省情况下,XStream不...

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

    这样,当我们使用Xstream序列化一个`Person`对象时,会得到如下的XML: ```xml &lt;firstName&gt;John &lt;lastName&gt;Doe ``` 为了序列化Java对象,我们可以创建一个Xstream实例并调用`toXML()`方法: ```java Person ...

    springMVC整合xStream实现对象和xml转换

    XStream的优点在于它能自动处理基本数据类型、集合和自定义类的转换,使得XML序列化和反序列化变得极其简单。 要实现"springMVC整合xStream实现对象和xml转换",我们需要以下步骤: 1. **引入依赖**:在项目的pom....

    序列化成xml文件所必须的jar包

    // 反序列化XML字符串回对象 Person deserializedPerson = (Person) xstream.fromXML(xml); System.out.println(deserializedPerson); } } class Person { private String firstName; private String ...

Global site tag (gtag.js) - Google Analytics