用 XStream 序列化/反序列化 XML 为 Java 对象(实例)
Posted on -06-05 19:06 Stephen Wong 阅读(1224) 评论(0) 编辑 收藏 网摘 所属分类: 数据持久化、序列化 , WebService , JavaXStream 项目主页:
/
需要 lib:
xstream-1.2.2.jar
xpp3_min-1.1.3.4.O.jar
这是 .5.24 打包的 lib
测试主程序:
package org.stephencat.test;
import com.thoughtworks.xstream. * ;
import java.util. * ;
/**
*测试XStream序列化和反序列化
* @author stephen.wjj
*
*/
public class XStreamTest{
/**
*测试序列化
*/
public static void TestSerializer(){
System.out.println( " =====Testingserializer===== " );
Personp1 = new Person();
p1.setName( " AAA " );
Personp2 = new Person();
p2.setName( " BBB " );
Personp3 = new Person();
p3.setName( " CCC " );
Groupg = new Group();
g.getPersons().add(p1);
g.getPersons().add(p2);
g.getPersons().add(p3);
g.setName( " KFC " );
XStreamxstream = new XStream();
// 声明标记名称对应的Java类
xstream.alias( " group " ,Group. class );
xstream.alias( " person " ,Person. class );
// 把Group的name属性视为XML属性
xstream.useAttributeFor(Group. class , " name " );
// 忽略XML中的<persons></persons>标记
xstream.addImplicitCollection(Group. class , " persons " );
System.out.println(xstream.toXML(g));
}
/**
*测试反序列化
*/
public static void TestDeserializer(){
System.out.println( " =====Testingdeserializer===== " );
Stringxml = " <groupname=/ " KFC/ " ><person><name>AAA</name></person><person><name>BBB</name></person><person><name>CCC</name></person></group> " ;
XStreamxstream = new XStream();
// 声明标记名称对应的Java类
xstream.alias( " group " ,Group. class );
xstream.alias( " person " ,Person. class );
// 把Group的name属性视为XML属性
xstream.useAttributeFor(Group. class , " name " );
// 忽略XML中的<persons></persons>标记
xstream.addImplicitCollection(Group. class , " persons " );
Groupg = (Group)xstream.fromXML(xml);
System.out.println( " Groupname= " + g.getName());
System.out.println( " Grouphaspersons= " + g.getPersons().size());
System.out.println( " Grouppersons: " );
if (g.getPersons().size() > 0 ){
Iteratorit = g.getPersons().iterator();
while (it.hasNext()){
Personp = (Person)it.next();
if (p != null ){
System.out.println(p.getName());
} else {
System.out.println( " Err!personinstanceisnull! " );
}
}
}
}
/**
* @param args
*/
public static void main(String[]args){
// TODOAuto-generatedmethodstub
TestSerializer();
TestDeserializer();
}
}
Console 输出:
===== Testingserializer =====
<groupname = " KFC " >
<person>
<name>AAA</name>
</person>
<person>
<name>BBB</name>
</person>
<person>
<name>CCC</name>
</person>
</group>
===== Testingdeserializer =====
Groupname = KFC
Grouphaspersons = 3
Grouppersons:
AAA
BBB
CCC
注:
用于反序列化的字符串(String xml = "...")中带有 XML 头部时不会影响结果
<? xmlversion="1.0" ?>
用于序列化的实体类:
Group
package org.stephencat.test;
import java.util. * ;
/**
*包含若干Person的Group
* @author stephen
*
*/
public class Group{
/**
*Group名称<br>
*需求规定这是XML中的一个属性
*/
private Stringname;
/**
*需求规定这是一堆若干数量的person标记
*/
private Listpersons = new ArrayList();
public StringgetName(){
return name;
}
public void setName(Stringname){
this .name = name;
}
public ListgetPersons(){
return persons;
}
public void setPersons(Listpersons){
this .persons = persons;
}
}
Person
package org.stephencat.test;
/**
*Group里面的Person
* @author stephen
*
*/
public class Person{
/**
*需求规定这是一个name标记
*/
private Stringname;
public StringgetName(){
return name;
}
public void setName(Stringname){
this .name = name;
}
}