零:特色java
简化的API;
无映射文件;
高性能,低内存占用;
整洁的XML;
不须要修改对象;支持内部私有字段,不须要setter/getter方法,final字段;非公有类,内部类;类不须要默认构造器,彻底对象图支持.维护对象引用计数,循环引用. i
提供序列化接口;
自定义转换类型策略;
详细的错误诊断;
快速输出格式;当前支持 JSON 和 morphing.数组
一:常见使用方法:缓存
建立 : 性能
XStream xs = new XStream();
批量添加别名注解:spa
//自动侦查注解 //自动侦查注解与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("别名")注解来标示别名.net
proessAnnotations重载方法、也可只接受一个classcode
手动添加别名:xml
//类的别名 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()方法简单处理,也能够跟如下方法同样解决blog
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)的区别在于性能.自动侦查注解将缓存全部类的类型.