`

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是Java开发中处理XML和JSON的强大工具,它提供了简单易用的API来实现对象与这两种数据格式之间的转换。通过理解和掌握xStream的使用,开发者可以更高效地处理数据序列化和反序列化任务。

    XStream XML与Json转换

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

    xstream将xml文档转换成json对象

    XStream的核心功能是能够将Java对象和XML之间的映射自动化,极大地简化了序列化和反序列化的过程。你可以通过Maven或Gradle在项目中添加XStream依赖。例如,在Maven的pom.xml文件中,你可以添加如下依赖: ```xml ...

    转载 xStream完美转换XML、JSON

    xStream是一个强大的库,它提供了一种简单的方式来序列化和反序列化Java对象到XML,反之亦然。在这个场景中,它同样能够处理JSON转换,虽然JSON不是其原生支持的格式,但通过一些额外的配置和库,如json-simple,...

    XStream在JavaBean与XML/JSON 之间相互转换

    XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个强大的工具在处理数据交换、持久化或配置文件时非常...

    Xstream操作Xml与Json.doc

    Xstream 是一个 Java 库,用于处理 XML 文件的序列化和反序列化,同时也支持将 JavaBean 转换为 JSON 格式。它的核心理念是通过简单的 API 设计,使得 XML 序列化过程变得简洁,无需额外的映射文件或辅助类。 ### 1...

    xml & json 转换工具

    3. **xstream-1.3.1.jar**:XStream是另一个Java库,它提供了一种简单的方式来序列化和反序列化Java对象为XML。在XML到JSON转换过程中,XStream可能首先用于将XML数据转换为Java对象,然后这些对象再由Json-lib处理...

    xStream完美转换XML、JSON

    xStream由Johannes Brodskie创建,它通过对象到XML/JSON的直接映射,实现了简单且直观的数据序列化。这种序列化方式省去了手动编写解析和序列化代码的繁琐过程,大大提高了开发效率。在本文中,我们将深入探讨...

    Xstream 类与Json之间转换

    Xstream是一个Java库,它提供了简单、高效的方式来序列化和反序列化Java对象为XML,反之亦然。它的主要优点在于其简洁的API和可读性强的XML输出。在我们的示例"Xstream 类与Json之间转换"中,我们可能会看到如何利用...

    《xStream完美转换XML、JSON》学习笔记

    接下来,使用xStream进行XML序列化和反序列化非常简单。初始化xStream实例后,通过`toXML()`和`fromXML()`方法即可完成转换。 ```java XStream xstream = new XStream(); String xml = xStream.toXML(employee); ...

    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

    xml 与json转换代码

    在Java中,可以使用各种库来实现XML到JSON的转换,其中XStream是一个流行的库,它提供了强大的XML序列化和反序列化功能。XStream虽然主要设计用来XML操作,但也可以通过添加额外的转换器来处理JSON。首先,你需要...

    json XStream

    总之,"json XStream"涉及的主题是使用XStream库配合Jettison来实现Java对象与JSON格式之间的序列化和反序列化。通过理解这两个库的功能和如何整合它们,开发者可以有效地在XML和JSON之间进行数据交换,满足跨平台和...

    XML、JAVA、JSON多种方式互相转换

    - Jackson库的`ObjectMapper`类可以将Java对象直接序列化为JSON字符串,或者反序列化JSON字符串为Java对象。 - Gson库同样提供了类似的`toJson`和`fromJson`方法,方便地在Java对象和JSON字符串之间转换。 4. ...

    android XML文件解析和序列化 demo

    Android并没有内置的XML序列化库,但可以借助第三方库如XStream或Jackson,或者手动实现序列化。手动实现通常涉及创建`toString()`方法,将对象属性转化为XML格式的字符串。 2. **Gson**: 虽然Gson主要用于JSON序列...

    Xstream操作Xml与Json(李志伟)WORD版最新版本

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

    将Java对象序列化成JSON和XML格式的实例

    总之,Java对象的序列化和反序列化是开发中常见的需求,而Fastjson和XStream都是强大且高效的工具,可以方便地处理JSON和XML格式的数据。通过这两个库,开发者可以轻松地在Java对象和这些数据格式之间进行转换,满足...

    xstream-1.3.1.jar

    6. **JSON 支持**:除了 XML,XStream 也支持 JSON 格式的序列化和反序列化,使其成为一个多用途的序列化工具。 **使用 XStream-1.3.1** 在给定的文件 `xstream-1.3.1.jar` 中,包含了 XStream 的 1.3.1 版本。这...

    xStream完美转换XML.docx

    总之,xStream是一个功能强大且灵活的工具,能够方便地处理Java对象与XML和JSON之间的转换,极大地简化了数据序列化和反序列化的任务,尤其是在互联网应用中,对于数据交换和存储具有很高的实用价值。

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

    Xstream 是一个强大的Java库,主要用于对象到XML的序列化和反序列化,它使得XML数据绑定变得简单易行。然而,除了XML之外,Xstream还可以处理JSON数据,这是一个相对较少人了解的功能。JSON(JavaScript Object ...

Global site tag (gtag.js) - Google Analytics