XStream

XStream库

XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索，并不需要对对象作出修改。XStream可以序列化内部字段，包括私private和final字段，并且支持非公开类以及内部类。
在缺省情况下，XStream不需要配置映射关系，对象和字段将映射为同名XML元素。但是当对象和字段名与XML中的元素名不同时，XStream支持指定别名。XStream支持以方法调用的方式，或是Java 标注的方式指定别名。
XStream在进行数据类型转换时，使用系统缺省的类型转换器。同时，也支持用户自定义的类型转换器。

对象图的序列化

当序列化一个对象时，XStream将序列化整个对象图。如果在对象图中遇到重复引用，在生成的XML中奖保留这些引用。以下面的CD类为例：
package com.abc.xstream;public class Cd {
private String id;

private Cd bonusCd;

Cd(String id, Cd bonusCd) {
this.id = id;
this.bonusCd = bonusCd;
}

Cd(String id) {
this.id = id;
}

public String getId() {
return id;
}

public Cd getBonusCd() {
return bonusCd;
}}
并且向列表添加一些Cd对象
Cd bj = new Cd("basement_jaxx_singles");Cd mr = new Cd("maria rita");

List order = new ArrayList();order.add(mr);// 两次添加同一个CD（两个引用指向同一个对象）order.add(bj);order.add(bj);// 添加自己（循环）order.add(order);XStream xstream = new XStream();xstream.alias("cd", Cd.class);System.out.println(xstream.toXML(order));
如果在XStream的缺省的相对引用模式下执行以上程序，程序将生成下面的XML：
<list>
  <cd>
    <id>maria rita</id>
  </cd>
  <cd>
    <id>basement_jaxx_singles</id>
  </cd>
  <cd reference="../cd[2]"/>
  <list reference=".."/></list>