其实XStream和JAXB在一些观念上是很相似的
但是JAXB作为Java EE的一个规范 是非常正式的 且和其他很多规范有联系 是一种标准的实现
这边简单说说实现方式(博客里有文介绍使用):
1.一个实体类,使用@XmlRootElement表示一下类(最简单的)
2.建立一个ObjectFactory用来产生这个实体类
3.使用JAXBContext 然后产生Marshaller(对象-->xml)或者UnMarshaller(xml-->对象)
而XStream使用起来更为简单
1.首先从XStream官网下载XStream
http://xstream.codehaus.org/download.html
2.下载后解压 将lib下的jar添加入项目就可以了
如下:
然后就可以编写代码了
为了方便 直接使用XStream的annotation:
3.实体类 Person:
- packageorg.cc.vo;
- importjava.util.List;
- importcom.thoughtworks.xstream.annotations.XStreamAlias;
- importcom.thoughtworks.xstream.annotations.XStreamAsAttribute;
- importcom.thoughtworks.xstream.annotations.XStreamImplicit;
- importcom.thoughtworks.xstream.annotations.XStreamOmitField;
- @XStreamAlias("Person")
- publicclassPerson{
- @XStreamAlias("name")
- @XStreamAsAttribute
- privateStringname;
- @XStreamAlias("age")
- privateintage;
- @XStreamAlias("sex")
- booleansex;
- @XStreamImplicit(itemFieldName="favor")
- privateList<String>favor;
- @XStreamOmitField
- inttempid;
- publicStringgetName(){
- returnname;
- }
- voidsetName(Stringname){
- this.name=name;
- intgetAge(){
- returnage;
- voidsetAge(intage){
- this.age=age;
- booleanisSex(){
- returnsex;
- voidsetSex(booleansex){
- this.sex=sex;
- publicList<String>getFavor(){
- returnfavor;
- voidsetFavor(List<String>favor){
- this.favor=favor;
- intgetTempid(){
- returntempid;
- voidsetTempid(inttempid){
- this.tempid=tempid;
- @Override
- publicStringtoString(){
- return"Person[name="+name+",age="+age+",sex="+sex
- +",favor="+favor+",tempid="+tempid+"]";
- }
@XStreamAlias(value)是别名 可以用在类名和属性名上修改显示的xml中的标签
@XStreamAsAttribute 把属性作为xml中的属性 而不是子元素
@XStreamImplicit(itemFieldName="favor") 还有一个keyFieldName的属性 这个是用来改写List和Map的显示 的
4.接下去只有一步,没有JAXB的建立ObjectFactory那一部,实现起来非常简洁直观:
importjava.util.ArrayList;
importcom.thoughtworks.xstream.XStream;
importcom.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
classMain{
staticvoidmain(String[]args){
XStreamx=newXStream();
//XStreamx=newXStream(newJettisonMappedXmlDriver());
x.processAnnotations(Person.class);
Personp=newPerson();
p.setAge(30);
List<String>fa=newArrayList<String>();
fa.add("游戏");
fa.add("上网");
p.setFavor(fa);
p.setName("cc");
Stringinfo=x.toXML(p);
System.out.println(info);
Personp2=(Person)x.fromXML(info);
System.out.println(p2);
输出:
- <Personname="cc">
- age>30</sex>falsefavor>游戏>上网Person Person[name=cc,age=30,sex=false,favor=[游戏,上网],tempid=0]
注意了以上代码注释掉的那块打开 并把没有参数的构造方法的XStream那一段注释掉产生的就是JSON(换了一个引擎)
产生内容如下: