用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

XStream 项目主页:

 

http://xstream.codehaus.org/

 

需要 lib :

 

xstream-1.2.2.jar

xpp3_min-1.1.3.4.O.jar

 

这是 2007.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("===== Testing serializer =====");

        Person p1 = new Person();

        p1.setName("AAA");

        Person p2 = new Person();

        p2.setName("BBB");

        Person p3 = new Person();

        p3.setName("CCC");

        

        Group g = new Group();

        g.getPersons().add(p1);

        g.getPersons().add(p2);

        g.getPersons().add(p3);

        g.setName("KFC");

        

        XStream xstream = 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("===== Testing deserializer =====");

        String xml = "<group name=/"KFC/"><person><name>AAA</name></person><person><name>BBB</name></person><person><name>CCC</name></person></group>";

        XStream xstream = 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");

        

        Group g = (Group) xstream.fromXML(xml);

        System.out.println("Group name = "+g.getName());

        System.out.println("Group has persons = "+g.getPersons().size());

        System.out.println("Group persons:");

        if(g.getPersons().size() > 0){

            Iterator it = g.getPersons().iterator();

            while(it.hasNext()){

                Person p = (Person)it.next();

                if(p!=null){

                    System.out.println(p.getName());

                }else{

                    System.out.println("Err! person instance is null!");

                }

            }

        }

    }

 

    /**

     * @param args

     */

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        TestSerializer();

        TestDeserializer();

 

    }

 

}

 

 

Console 输出:

===== Testing serializer =====

<group name="KFC">

  <person>

    <name>AAA</name>

  </person>

  <person>

    <name>BBB</name>

  </person>

  <person>

    <name>CCC</name>

  </person>

</group>

===== Testing deserializer =====

Group name = KFC

Group has persons = 3

Group persons:

AAA

BBB

CCC

 

 

注:

 

用于反序列化的字符串(String xml = "...")中带有 XML 头部时不会影响结果

<?xml version="1.0"?>

 

 

 

用于序列化的实体类:

 

Group

package org.stephencat.test;

import java.util.*;

 

/**

 * 包含若干 Person 的 Group 

 * @author stephen

 *

 */

public class Group {

    

    /**

     * Group名称<br>

     * 需求规定这是 XML 中的一个属性

     */

    private String name;

    /**

     * 需求规定这是一堆若干数量的 person 标记

     */

    private List persons = new ArrayList();

    

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public List getPersons() {

        return persons;

    }

    public void setPersons(List persons) {

        this.persons = persons;

    }

 

}

 

 

Person

package org.stephencat.test;

 

/**

 * Group 里面的 Person

 * @author stephen

 *

 */

public class Person {

    

    /**

     * 需求规定这是一个 name 标记

     */

    private String name;

 

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

}

 

 

 

(请您对文章做出评价)

« 上一篇:用 XStream 序列化/反序列化 XML 为 Java 对象

» 下一篇:左右人生的13条定律

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值