零:特色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)的區別在於性能.自動偵查註解將緩存全部類的類型.