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

41 篇文章 0 订阅

其实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的annotation:

 

3.实体类 Person:

 

Java代码 复制代码  收藏代码
  1. package org.cc.vo;   
  2.   
  3. import java.util.List;   
  4.   
  5. import com.thoughtworks.xstream.annotations.XStreamAlias;   
  6. import com.thoughtworks.xstream.annotations.XStreamAsAttribute;   
  7. import com.thoughtworks.xstream.annotations.XStreamImplicit;   
  8. import com.thoughtworks.xstream.annotations.XStreamOmitField;   
  9.   
  10. @XStreamAlias("Person")   
  11. public class Person {   
  12.   
  13.     @XStreamAlias("name")   
  14.     @XStreamAsAttribute  
  15.     private String name;   
  16.        
  17.     @XStreamAlias("age")   
  18.     private int age;   
  19.        
  20.     @XStreamAlias("sex")   
  21.     private boolean sex;   
  22.        
  23.     @XStreamImplicit(itemFieldName="favor")   
  24.     private List<String> favor;   
  25.   
  26.     @XStreamOmitField  
  27.     private int tempid;   
  28.        
  29.     public String getName() {   
  30.         return name;   
  31.     }   
  32.   
  33.     public void setName(String name) {   
  34.         this.name = name;   
  35.     }   
  36.   
  37.     public int getAge() {   
  38.         return age;   
  39.     }   
  40.   
  41.     public void setAge(int age) {   
  42.         this.age = age;   
  43.     }   
  44.   
  45.     public boolean isSex() {   
  46.         return sex;   
  47.     }   
  48.   
  49.     public void setSex(boolean sex) {   
  50.         this.sex = sex;   
  51.     }   
  52.   
  53.     public List<String> getFavor() {   
  54.         return favor;   
  55.     }   
  56.   
  57.     public void setFavor(List<String> favor) {   
  58.         this.favor = favor;   
  59.     }   
  60.   
  61.     public int getTempid() {   
  62.         return tempid;   
  63.     }   
  64.   
  65.     public void setTempid(int tempid) {   
  66.         this.tempid = tempid;   
  67.     }   
  68.   
  69.     @Override  
  70.     public String toString() {   
  71.         return "Person [name=" + name + ", age=" + age + ", sex=" + sex   
  72.                 + ", favor=" + favor + ", tempid=" + tempid + "]";   
  73.     }   
  74.   
  75.   
  76.   
  77. }  
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那一部,实现起来非常简洁直观:

Java代码 复制代码  收藏代码
  1. package org.cc.vo;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.List;   
  5.   
  6. import com.thoughtworks.xstream.XStream;   
  7. import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;   
  8.   
  9. public class Main {   
  10.   
  11.     public static void main(String[] args) {   
  12.          XStream x=new XStream();   
  13. //         XStream x = new XStream(new JettisonMappedXmlDriver());   
  14.          x.processAnnotations(Person.class);   
  15.          Person p=new Person();   
  16.          p.setAge(30);   
  17.          List<String> fa=new ArrayList<String>();   
  18.          fa.add("游戏");   
  19.          fa.add("上网");   
  20.          p.setFavor(fa);   
  21.          p.setName("cc");   
  22.          String info=x.toXML(p);   
  23.          System.out.println(info);   
  24.             
  25.          Person p2=(Person)x.fromXML(info);   
  26.          System.out.println(p2);   
  27.     }   
  28.   
  29. }  
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);
	}

}

 输出:

Xml代码 复制代码  收藏代码
  1. <Person name="cc">  
  2.   <age>30</age>  
  3.   <sex>false</sex>  
  4.   <favor>游戏</favor>  
  5.   <favor>上网</favor>  
  6. </Person>  
  7. Person [name=ccage=30sex=falsefavor=[游戏, 上网], tempid=0]  

 

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

产生内容如下:

Html代码 复制代码  收藏代码
  1. {"Person":{"@name":"cc","age":30,"sex":false,"favor":["游戏","上网"]}}   
  2. Person [name=ccage=30sex=falsefavor=[游戏, 上网], tempid=0]  
{"Person":{"@name":"cc","age":30,"sex":false,"favor":["游戏","上网"]}}
Person [name=cc, age=30, sex=false, favor=[游戏, 上网], tempid=0]

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值