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的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]

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章