XStream快速起步 简单方便实现序列化(XML和JSON)

其实XStream和JAXB在一些观念上是很相似的

但是JAXB作为Java EE的一个规范 是非常正式的 且和其他很多规范有联系 是一种标准的实现

这边简单说说实现方式(博客里有文介绍使用):

1.一个实体类,使用@XmlRootElement表示一下类(最简单的)

2.建立一个ObjectFactory用来产生这个实体类

3.使用JAXBContext 然后产生Marshaller(对象-->xml)或者UnMarshaller(xml-->对象)

 

 

而XStream使用起来更为简单

 

1.首先从XStream官网下载XStream

http://xstream.codehaus.org/download.html

 

2.下载后解压 将lib下的jar添加入项目就可以了

如下:


XStream快速起步 简单方便实现序列化(XML和JSON)
 

然后就可以编写代码了

为了方便 直接使用XStream的annotation:

 

3.实体类 Person:

 

package org.cc.vo;

import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.annotations.XStreamOmitField;

@XStreamAlias("Person")
public class Person {

	@XStreamAlias("name")
	@XStreamAsAttribute
	private String name;
	
	@XStreamAlias("age")
	private int age;
	
	@XStreamAlias("sex")
	private boolean sex;
	
	@XStreamImplicit(itemFieldName="favor")
	private List<String> favor;

	@XStreamOmitField
	private int tempid;
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public boolean isSex() {
		return sex;
	}

	public void setSex(boolean sex) {
		this.sex = sex;
	}

	public List<String> getFavor() {
		return favor;
	}

	public void setFavor(List<String> favor) {
		this.favor = favor;
	}

	public int getTempid() {
		return tempid;
	}

	public void setTempid(int tempid) {
		this.tempid = tempid;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", sex=" + sex
				+ ", favor=" + favor + ", tempid=" + tempid + "]";
	}



}

 @XStreamAlias(value)是别名 可以用在类名和属性名上修改显示的xml中的标签

 @XStreamAsAttribute 把属性作为xml中的属性 而不是子元素

 @XStreamImplicit(itemFieldName="favor") 还有一个keyFieldName的属性 这个是用来改写List和Map的显示 的

 @XStreamOmitField 此标记的属性不会序列化

 

 

4.接下去只有一步,没有JAXB的建立ObjectFactory那一部,实现起来非常简洁直观:

package org.cc.vo;

import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

public class Main {

	public static void main(String[] args) {
         XStream x=new XStream();
//         XStream x = new XStream(new JettisonMappedXmlDriver());
         x.processAnnotations(Person.class);
         Person p=new Person();
         p.setAge(30);
         List<String> fa=new ArrayList<String>();
         fa.add("游戏");
         fa.add("上网");
         p.setFavor(fa);
         p.setName("cc");
         String info=x.toXML(p);
         System.out.println(info);
         
         Person p2=(Person)x.fromXML(info);
         System.out.println(p2);
	}

}

 输出:

<Person name="cc">
  <age>30</age>
  <sex>false</sex>
  <favor>游戏</favor>
  <favor>上网</favor>
</Person>
Person [name=cc, age=30, sex=false, favor=[游戏, 上网], tempid=0]

 

注意了以上代码注释掉的那块打开 并把没有参数的构造方法的XStream那一段注释掉产生的就是JSON(换了一个引擎)

产生内容如下:

{"Person":{"@name":"cc","age":30,"sex":false,"favor":["游戏","上网"]}}
Person [name=cc, age=30, sex=false, favor=[游戏, 上网], tempid=0]

 

 

 

 

 

你可能感兴趣的:(xstream)