簡體   English   中英

List根元素的XStream別名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM