文档章节

XStream使用小结

玄影镜心
 玄影镜心
发布于 2016/04/21 11:27
字数 807
阅读 277
收藏 2



零:特点

简化的API;
无映射文件;
高性能,低内存占用;
整洁的XML;
不需要修改对象;支持内部私有字段,不需要setter/getter方法,final字段;非公有类,内部类;类不需要默认构造器,完全对象图支持.维护对象引用计数,循环引用. i
提供序列化接口;
自定义转换类型策略;
详细的错误诊断;
快速输出格式;当前支持 JSON 和 morphing.


一:常见使用方法:

创建 : 

XStream xs = new XStream();

批量添加别名注解:

//自动侦查注解
//自动侦查注解与XStream.processAnnotations(Class[] cls)的区别在于性能.自动侦查注解将缓存所有类的类型.
xs.autodetectAnnotations(true);

Class[] clazzArray = new Class[]{ShunFengRouteResponseBean.class, 
				ShunFengRouteResponseBean.RouteInfo.class,
				ShunFengRouteResponseBean.ShunfengBody.class};
xs.processAnnotations(clazzArray); //批量添加注解

proessAnnotations方法可以接受一个class类数组,该类中使用@XStreamAlias("别名")注解来标示别名

proessAnnotations重载方法、也可只接受一个class

手动添加别名:

//类的别名
xs.alias("Response", ShunFengRouteResponseBean.class); 
//类中字段的别名  (别名, 类名, 字段名)
xs.aliasField("RouteResponse", ShunFengRouteResponseBean.ShunfengBody.class, "routeInfoList"); 
//将字段添加到该类中所谓xml标签的属性值
//注意:如下:mailno字段必须包含在类ShunfengBody中,否则报错
xs.useAttributeFor(ShunFengRouteResponseBean.ShunfengBody.class, "mailno");


其他问题处理:

1:javaBean转换成xml后,含有下划线的属性会变化成双下滑线,可以使用replaceAll()方法简单处理,也可以跟以下方法一样解决

2:对于本身含有下划线的字段名,转换时发现无法填充值,可以使用以下方法解决

//XStream xs = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-","_")));  
XStream xs = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));

3:若使用内部类来表达类之间的依赖性时,转换成的xml会出现<out-...>标签

    解决方法:1 使用静态内部类  2:使用反射将内部类制空


其他:

1:序列化与反序列化
对象不需要实现序列化接口. 反序列的对象与原对象不是同一对象.
String xml = xstream.toXML(obj);
T obj = (T)xstream.fromXML(xml);

2:隐式集合

当我们使用集合类时不想显示集合,只显示里面的元素即可.
使用隐式集合前:
<list>
   <element />
   <element />
<list>

使用隐式集合:

xstream.addImplicitCollection(Person.class, "list");
使用隐式集合后:
   <element />
   <element />

3:XML属性

将类的字段转换成类映射元素的一个属性,而不是元素.
xstream.useAttributeFor(Blog.class, "author");
xstream.registerConverter(new AuthorConverter()); //  注册将对象转换成字符串的转换类.

SingleValueConverter  转换成简单字符串
Converter                  转换成对象

二:注解

包别名
xstream.aliasPackage("my.company", "org.thoughtworks");

注解
@XStreamAlias("message") 别名注解
作用目标: 类,字段

@XStreamImplicit 隐式集合
@XStreamImplicit(itemFieldName="part")
作用目标: 集合字段

@XStreamConverter(SingleValueCalendarConverter.class) 注入转换器
作用目标: 对象

@XStreamAsAttribute 转换成属性
作用目标: 字段

@XStreamOmitField 忽略字段
作用目标: 字段

Auto-detect Annotations 自动侦查注解
xstream.autodetectAnnotations(true);

自动侦查注解与XStream.processAnnotations(Class[] cls)的区别在于性能.自动侦查注解将缓存所有类的类型.



参考:http://blog.csdn.net/gaozhlzh/article/details/6826140

          http://my.oschina.net/exit/blog/156613?fromerr=KOpsTo2n



© 著作权归作者所有

玄影镜心
粉丝 9
博文 102
码字总数 53030
作品 0
西安
高级程序员
私信 提问
android下通过xstream解析xml格式信息

==========推荐============ 实例教程-----会员贡献索引贴 http://www.eoeandroid.com/thread-1987-1-1.html android 图像处理滤镜系列合集 http://www.eoeandroid.com/thread-178656-1-1.ht......

长平狐
2012/08/21
131
0
JavaBean到XML和JSON的转换

XML和JSON是当今常用的两种数据描述与传输的格式,特别是涉及到JS时使用JSON颇为频繁。自然,在Java的世界里少不了完成JavaBean与这两种格式相互转换的组件,那就是XStream和JSON-lib。这里我...

Idiot_s_Sky
2014/01/14
740
0
android下通过xstream解析xml格式信息

==========推荐============ 实例教程-----会员贡献索引贴 http://www.eoeandroid.com/thread-1987-1-1.html android 图像处理滤镜系列合集 http://www.eoeandroid.com/thread-178656-1-1.ht......

长平狐
2012/08/14
246
0
android下通过xstream解析xml格式信息

==========推荐============ 实例教程-----会员贡献索引贴 http://www.eoeandroid.com/thread-1987-1-1.html android 图像处理滤镜系列合集 http://www.eoeandroid.com/thread-178656-1-1.ht......

长平狐
2012/08/09
106
0
XStream转换时忽略未知字段

XStream是一个用于将对象序列化为xml以及将xml生成对象的库,通过它可以非常方便的做对象与xml(json等其他格式)之间的转换。但是在使用XStream过程中,会遇到xml元素与对象元素并不是一一匹配...

JasonSE
2014/04/29
10.1K
1

没有更多内容

加载失败,请刷新页面

加载更多

spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
54分钟前
2
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部