XStream使用小结



零:特点

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


一:常见使用方法:

创建 :

XStreamxs=newXStream();

批量添加别名注解:

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

Class[]clazzArray=newClass[]{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:对于本身含有下划线的字段名,转换时发现无法填充值,可以使用以下方法解决

//XStreamxs=newXStream(newXppDriver(newXmlFriendlyNameCoder("_-","_")));
XStreamxs=newXStream(newDomDriver("UTF-8",newXmlFriendlyNameCoder("-_","_")));

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

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


其他:

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

2:隐式集合

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

使用隐式集合:

xstream.addImplicitCollection(Person.class,"list");
使用隐式集合后:
<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://www.jb51.cc/article/p-pyykjbwr-bhm.html

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇