`

XStream快速起步 简单方便实现序列化(XML和JSON)

 
阅读更多

其实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:

 

package org.cc.vo;

import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.annotations.XStreamOmitField;

@XStreamAlias("Person")
public class Person {

	@XStreamAlias("name")
	@XStreamAsAttribute
	private String name;
	
	@XStreamAlias("age")
	private int age;
	
	@XStreamAlias("sex")
	private boolean sex;
	
	@XStreamImplicit(itemFieldName="favor")
	private List<String> favor;

	@XStreamOmitField
	private int tempid;
	
	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 boolean isSex() {
		return sex;
	}

	public void setSex(boolean sex) {
		this.sex = sex;
	}

	public List<String> getFavor() {
		return favor;
	}

	public void setFavor(List<String> favor) {
		this.favor = favor;
	}

	public int getTempid() {
		return tempid;
	}

	public void setTempid(int tempid) {
		this.tempid = tempid;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", sex=" + sex
				+ ", favor=" + favor + ", tempid=" + tempid + "]";
	}



}

 @XStreamAlias(value)是别名 可以用在类名和属性名上修改显示的xml中的标签

 @XStreamAsAttribute 把属性作为xml中的属性 而不是子元素

 @XStreamImplicit(itemFieldName="favor") 还有一个keyFieldName的属性 这个是用来改写List和Map的显示 的

 @XStreamOmitField 此标记的属性不会序列化

 

 

4.接下去只有一步,没有JAXB的建立ObjectFactory那一部,实现起来非常简洁直观:

package org.cc.vo;

import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

public class Main {

	public static void main(String[] args) {
         XStream x=new XStream();
//         XStream x = new XStream(new JettisonMappedXmlDriver());
         x.processAnnotations(Person.class);
         Person p=new Person();
         p.setAge(30);
         List<String> fa=new ArrayList<String>();
         fa.add("游戏");
         fa.add("上网");
         p.setFavor(fa);
         p.setName("cc");
         String info=x.toXML(p);
         System.out.println(info);
         
         Person p2=(Person)x.fromXML(info);
         System.out.println(p2);
	}

}

 输出:

<Person name="cc">
  <age>30</age>
  <sex>false</sex>
  <favor>游戏</favor>
  <favor>上网</favor>
</Person>
Person [name=cc, age=30, sex=false, favor=[游戏, 上网], tempid=0]

 

注意了以上代码注释掉的那块打开 并把没有参数的构造方法的XStream那一段注释掉产生的就是JSON(换了一个引擎)

产生内容如下:

{"Person":{"@name":"cc","age":30,"sex":false,"favor":["游戏","上网"]}}
Person [name=cc, age=30, sex=false, favor=[游戏, 上网], tempid=0]

 

 

 

 

 

  • 大小: 8.2 KB
0
4
分享到:
评论
6 楼 lizhenlzlz 2018-01-07  
对我有用,评论也有用
5 楼 jjshanwei 2013-05-31  
感谢 fair_jm, p7engqingyang的提醒!
4 楼 p7engqingyang 2013-05-23  
jjshanwei 写道
用XStream一个不爽的地方时,当xml的结构有变化时,比如最简单的xml增加了一个字段,就会抛异常,容错做的不好!

通过实现自有的MapperWrapper即可
3 楼 p7engqingyang 2013-05-23  
jjshanwei 写道
用XStream一个不爽的地方时,当xml的结构有变化时,比如最简单的xml增加了一个字段,就会抛异常,容错做的不好!

这个是可以解决的哦。http://p7engqingyang.iteye.com/admin/blogs/1702426
2 楼 fair_jm 2013-05-23  
jjshanwei 写道
用XStream一个不爽的地方时,当xml的结构有变化时,比如最简单的xml增加了一个字段,就会抛异常,容错做的不好!

这个是用来做持久化用的 手工外部修改持久化的文件本身的意义不是很大吧 格式规定上比较严格是正常的 就比如java自己的ObjectOutputStream之类的 产生的文件比xml要难改得多吧.
1 楼 jjshanwei 2013-05-23  
用XStream一个不爽的地方时,当xml的结构有变化时,比如最简单的xml增加了一个字段,就会抛异常,容错做的不好!

相关推荐

    XStream XML与Json转换

    XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。 在缺省情况下,XStream不需要配置映射关系,对象和字段将映射为同名XML元素。但是当对象和字段名与XML中的元素名不同时,...

    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

    Xstream操作Xml与Json.doc

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

    xstream-1.4.15.jar

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

    XStream使用例子

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

    XStream所需jar包

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

    xStream解析工具包

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

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

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

    xstream-1.3.1.jar

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

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

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

    django model object序列化实例

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

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

    使用xstream序列化的类不需要实现serializable接口。xstream是一种序列 化工具而不是数据绑定工具,就是说不能从xml或者xml schema definition (xsd)文件生成类。 和其他序列化工具相比,xstream 有三个突出的特点...

    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