thought works提供的开源jar库,用于完成bean对象与xml文档之间的相互转换,也可完成bean与json的转换,bean无需提供get/set与默认无参构造器。
// 类名作为xml文档的根节点
// @XStreamAlias用于指定根节点的别名,默认类全名
@XStreamAlias("xx")
public class Xx {
// 类属性默认作为根节点的子节点
// @XStreamAlias用于指定子节点的别名,默认属性名
@XStreamAlias("name")
private String name;
// @XStreamAsAttribute将属性作为根节点或上级节点的一个属性,而不再是子节点
@XStreamAsAttribute
@XStreamAlias("id")
private Integer id;
// map内的每个键值对,对应子节点yy内的一个entry子节点,key和value分别对应entry内的两个子节点
// <yy><entry><string>..</string><object>..</object></entry></yy>
@XStreamAlias("yy")
private Map<String, Object> yy;
// @XStreamImplicit可去掉外层的list节点,只列举List的元素,元素的名字可由itemFieldName指定
@XStreamImplicit(itemFieldName="str")
private List<String> Zz;
// @XStreamOmitField用于忽略age,阻止其序列化
@XStreamOmitField
private Integer age;
//get/set
...
public static void main(String[] args) {
XStream xStream = new XStream();
// 将对象序列化为xml串
// 创建一个bean,bean的属性必须初始化,否则不能序列化
xStream.autodetectAnnotations(true);
Xx xx = new Xx();
xx.setKey("aa");
xx.setValue("bb");
String xmlStr = xStream.toXML(cd);
// 将xml串反序列化为对象
// 创建一个bean,由xml来初始化
xstream.alias("xx", ....Xx.class);
xstream.alias("name", ....String.class);
xstream.alias("id", ....Integer.class);
Xx xx= new Xx();
xx = (Xx) xstream.fromXML(xml字符串);
}
}