List根元素的XStream别名

我希望能够根据列表中包含的对象类型对根列表元素进行别名。 例如,这是我目前的输出:

 Gold Silver Bronze  

这就是我想要的样子:

  Gold Silver Bronze  

我可以在全球范围内这样说,所有列表都应该别名为硬币,但我有很多不同的列表,这是行不通的。 关于如何做到这一点的任何想法? 似乎应该很简单,但当然,事实并非如此。

编辑:我应该指定,我正在尝试将对象序列化为xml。 我使用Spring 3 MVC作为我的Web框架。

假设你有一个带有type属性的Coin类,如下所示:

 @XStreamAlias("coin") public class Coin { String type; } 

你有一个Coins类来构成一个硬币列表:

 @XStreamAlias("coins") public class Coins{ @XStreamImplicit List coins = new ArrayList(); } 

注意注释。 列表是隐含的,硬币类将显示为“硬币”。

输出将是:

   Gold   Silver   Bronze   

这与你要求的不一样,但有一个原因。

首先,硬币只有一个属性,但我们不确定你想要显示的所有对象是否也只有一个属性。 所以,我们需要告诉我们正在讨论哪个对象属性。

您还可以将Coin属性显示为XML属性,而不是字段。 如下:

 @XStreamAlias("coin") public class Coin { @XStreamAsAttribute String type; Coin(String type) { this.type = type; } } 

这是输出:

      

希望能帮助到你。

这不是一个理想的解决方案,因为它需要一个单独的包装类,但你可以这样做:

 public class CoinResponse { private List coinList; public CoinResponse(List coinList) { this.coinList = coinList; } public List getCoins() { return this.coinList; } } 

这是丑陋的部分:

 List 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 coins = new ArrayList(); }