XStream使用小結



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



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

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

相關文章
相關標籤/搜索