`

使用XStream把Java对象XML/JSON格式的序列化和反序列化

阅读更多
试了一下Thoughtworks的XStream,以测试驱动和敏捷开发著称的Thoughtworks,
写出的XStream果然很容易使用。
下面举一个用一个小例子说明如何使用:
实体Person,我们希望Person的对象能够和XML/JSON相互转化
package edu.jlu.fuliang;

public class Person
{
    private String name;
    private int age;
    private Address address;
    private String email;

    
    public Person()
    {
    }

    public Person( String name, int age, Address address, String email )
    {
        this.name = name;
        this.age = age;
        this.address = address;
        this.email = email;
    }

    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 Address getAddress()
    {
        return address;
    }

    public void setAddress( Address address )
    {
        this.address = address;
    }

    public String getEmail()
    {
        return email;
    }

    public void setEmail( String email )
    {
        this.email = email;
    }

    @Override
    public String toString()
    {
        return "name:" + name + ",age:" + age + ",address:" + address + ",email:" + email;
    }
}


package edu.jlu.fuliang;

public class Address
{
    private String street;
    private String city;
    
    public Address()
    {
    }

    
    public Address( String street, String city )
    {
        this.street = street;
        this.city = city;
    }


    public String getStreet()
    {
        return street;
    }

    public void setStreet( String street )
    {
        this.street = street;
    }

    public String getCity()
    {
        return city;
    }

    public void setCity( String city )
    {
        this.city = city;
    }
    
    @Override
    public String toString()
    {
        return "street:" + street + ",city:" + city;
    }
}

写一个测试来看看如何使用XStream:
package edu.jlu.fuliang;

import junit.framework.TestCase;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

public class XStreamTest extends TestCase
{
    private Person person;
    @Override
    protected void setUp() throws Exception
    {
        Address address = new Address("中关村","北京");
        person = new Person("张三",12,address,"zhangsan@gmail.com");
    }
 
    public void testObjectXML()
    {
        XStream xStream = new XStream();
        xStream.alias( "Person", Person.class);
        xStream.alias( "Address", Address.class );
        String xml = xStream.toXML( person );
        System.out.println("Serialize person to XML:\n" + xml);
        
        Person p = (Person) xStream.fromXML( xml );
        System.out.println("Deserialize XML to person:\n" + p);
    }
    
    public void testObjectJSON(){
        XStream xStream = new XStream(new JettisonMappedXmlDriver());
        xStream.setMode( XStream.NO_REFERENCES );
        xStream.alias( "Person", Person.class );
        xStream.alias("Address", Address.class);
        String json = xStream.toXML( person );
        System.out.println("Serialize person to JSON:\n" + json);
        
        Person p = (Person) xStream.fromXML( json );
        System.out.println("Deserialize JSON to person:\n" + p);
    }
}

结果:
引用

<Person>
  <name>张三</name>
  <age>12</age>
  <address>
    <street>中关村</street>
    <city>北京</city>
  </address>
  <email>zhangsan@gmail.com</email>
</Person>

Serialize person to XML:
<Person>
  <name>张三</name>
  <age>12</age>
  <address>
    <street>中关村</street>
    <city>北京</city>
  </address>
  <email>zhangsan@gmail.com</email>
</Person>

Deserialize XML to person:
name:张三,age:12,address:street:中关村,city:北京,email:zhangsan@gmail.com

Serialize person to JSON:
{"Person":{"name":"张三","age":12,"address":{"street":"中关村","city":"北京"},"email":"zhangsan@gmail.com"}}

Deserialize json to person:
name:张三,age:12,address:street:中关村,city:北京,email:zhangsan@gmail.com


2
1
分享到:
评论
4 楼 fuliang 2012-05-13  
testObjectJSON里面已经有演示了

LewJun 写道
这里面有将json转换成为对象的方法。
下面的json是使用了List之后生成的。

请问:
应该怎么将这段json   {'teachers': [ {'id': 1, 'name': 'Rose'}, { 'id': 3, 'name': 'Tony' } ]}
还原成为对象?

3 楼 LewJun 2012-04-26  
这里面有将json转换成为对象的方法。
下面的json是使用了List之后生成的。

请问:
应该怎么将这段json   {'teachers': [ {'id': 1, 'name': 'Rose'}, { 'id': 3, 'name': 'Tony' } ]}
还原成为对象?
2 楼 fuliang 2009-05-22  
yajie 写道

太麻烦了。

晕,这还麻烦? 只用了这么一句话
String xml = xStream.toXML( person ); 
请教一个更简洁的lib
1 楼 yajie 2009-05-22  
太麻烦了。

相关推荐

    XStream XML与Json转换

    XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。 在缺省情况下,XStream不...

    Xstream操作Xml与Json.doc

    Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...

    xstream实现实体类序列化转xml

    xstream-1.4.2.jar,xpp3_min-1.1.4.jar,xmlpull-1.1.3.1.jar 包括 //XML --&gt; JavaBean, //XML --&gt; JavaBean //JavaBean --&gt; JSON,//JSON--&gt; JavaBean

    基于Java的Struts2 XStream插件设计源码

    Struts2 XStream插件:基于Java开发,包含20个文件,包括12个Java类文件...该项目是一个Struts2插件,可以输出JSON或XML格式数据,使用Xstream库进行序列化和反序列化,旨在为开发者提供一个高效、便捷的数据处理工具。

    xstream-1.4.15.jar

    Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发。 0x01 漏洞描述 Xstream上次对CVE-2020-26217处理并不彻底,虽然通过黑名单...

    XStream使用例子

    XStream使用例子,如何序列化、反序列化到XML和JSON格式。

    基于Java的XML解析与反射设计模式.doc

    xstream可以完美转换xml,与以往的解析xml工具dom相比,xstream是一个易用的、开源 的库,使用起来简单、小巧,容易理解,可以轻易的将java对象和xml文档相互转换,而 且可以修改某个特定的属性和节点名称。...

    xstream-1.3.1.jar

    XStream是Java类库,用来将对象序列化成XML (JSON)或反序列化为对象。XStream是自由软件,可以在BSD许可证的许可下分发。

    Xstream for Json 完整范例(绝对好用)

    很多人都用过Xstream对XML生成和读取,但是对Json的序列化和对象化,还很少有人知道。只需两个类包,就可以比较好的完成了,还不试试……

    XStream所需jar包

    Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...

    django model object序列化实例

    在J2EE的开发中,这是很常用的技术,比如一个java class与xml之间的序列化与反序列化,我们可以通过 xstream来实现,如果是与json之间的转换,我们可以通过 gson.jar或者jsonlib.jar 来实现。方法很多,也是常见的...

    xStream解析工具包

    Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...

    Spring+Cloud+配置.pdf

    JAXB (Spring XML 序列化) SAX (Simple API for XML) XML Stream XStream Properties(JDK API 可处理) Key Value 配置模式 XML 配置模式 .ini(JDK Properties API 可处理) JSON(第三方) YAML(第三方...

    memcached session manager 1.9.6 适用于 tomcat 8 各版本 (2017-03-21更新))

    transcoderFactoryClass支持5种序列化方式,区别和选择自己研究吧 de.javakaffee.web.msm.JavaSerializationTranscoderFactory de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory de....

    memcached session manager 1.9.6 适用于 tomcat 8 各版本

    transcoderFactoryClass支持5种序列化方式,区别和选择自己研究吧 de.javakaffee.web.msm.JavaSerializationTranscoderFactory de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory de....

Global site tag (gtag.js) - Google Analytics