[英]XStream Alias of List root elements
我希望能夠根據列表中包含的對象類型對根列表元素進行別名。 例如,這是我當前的輸出:
<list>
<coin>Gold</coin>
<coin>Silver</coin>
<coin>Bronze</coin>
</list>
這就是我想要的樣子:
<coins>
<coin>Gold</coin>
<coin>Silver</coin>
<coin>Bronze</coin>
</coins>
我可以在全球范圍內通過說所有列表應該別名為硬幣來做到這一點,但我有很多不同的列表,這是行不通的。 關於如何做到這一點的任何想法? 看起來它應該很簡單,但當然,事實並非如此。
編輯:我應該指定,我正在嘗試將對象序列化為xml。 我使用Spring 3 MVC作為我的Web框架。
假設你有一個帶有type屬性的Coin類,如下所示:
@XStreamAlias("coin")
public class Coin {
String type;
}
你有一個Coins類來構成一個硬幣列表:
@XStreamAlias("coins")
public class Coins{
@XStreamImplicit
List<Coin> coins = new ArrayList<Coin>();
}
注意注釋。 列表是隱含的,硬幣類將顯示為“硬幣”。
輸出將是:
<coins>
<coin>
<type>Gold</type>
</coin>
<coin>
<type>Silver</type>
</coin>
<coin>
<type>Bronze</type>
</coin>
</coins>
這與你要求的不一樣,但有一個原因。
首先,硬幣只有一個屬性,但我們不確定你想要顯示的所有對象是否也只有一個屬性。 所以,我們需要告訴我們正在討論哪個對象屬性。
您還可以將Coin屬性顯示為XML屬性,而不是字段。 如下:
@XStreamAlias("coin")
public class Coin {
@XStreamAsAttribute
String type;
Coin(String type) {
this.type = type;
}
}
這是輸出:
<coins>
<coin type="Gold"/>
<coin type="Silver"/>
<coin type="Bronze"/>
</coins>
希望能幫助到你。
這不是一個理想的解決方案,因為它需要一個單獨的包裝類,但你可以這樣做:
public class CoinResponse {
private List<Coin> coinList;
public CoinResponse(List<Coin> coinList) {
this.coinList = coinList;
}
public List<Coin> getCoins() {
return this.coinList;
}
}
這是丑陋的部分:
List<Coin> coins = Arrays.asList( new Coin(), new Coin(), new Coin());
CoinResponse response = new CoinResponse(coins);
XStream xstream = new XStream();
xstream.alias( "coins", CoinResponse.class );
xstream.addImplicitCollection( CoinResponse.class, "coinList" );
System.out.println(xstream.toXML(response));
基本上,這告訴Xstream在轉換CoinResponse時使用“硬幣”,然后根據列表本身不使用任何名稱。
@XStreamAlias("coins")
public class Coins {
@XStreamImplicit(itemFieldName="coin")
List<String> coins = new ArrayList<String>();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.