2012-07-05 63 views
2

我想使用XStream向JSON輸出一個小對象圖。只有輸出,不需要反序列化。XStream:使用XStream忽略集合

的對象是非常簡單的:

@XStreamAlias("players") 
public class Players { 

    @XStreamImplicit 
    private List<Player> players = new ArrayList<Player>(); 

    public Players() { 
     for (int i = 0; i < 5; ++i) { 
      players.add(new Player("Player " + i)); 
     } 
    } 
} 

@XStreamAlias("player") 
public class Player { 
    private String name; 
    public Player(String name) { 
     this.name = name; 
    } 
} 

幸運的是,不必要的名單包裝元素在JSON省略:

{ players: { player: { name: "Player 4"}}} 

但不幸的是,僅最後一個元素被打印

我使用的XStream 1.4.2,intialized這樣的:

XStream xstream = new XStream(new JsonHierarchicalStreamDriver()); 
xstream.setMode(XStream.NO_REFERENCES); 
xstream.aliasSystemAttribute(null, "class"); 
xstream.autodetectAnnotations(true); 
String out = xstream.toXML(xstramAliasObject); 

據我所看到的設置類似於這樣的問題:XStream Alias of List root elements

我的例子有什麼問題?

在此先感謝! 問候,邁克爾

回答

0

我使用的是相同的庫和,但得到整個消息..

{"players": { 
    "player": { 
    "name": "Player 0" 
    }, 
    "player": { 
    "name": "Player 1" 
    }, 
    "player": { 
    "name": "Player 2" 
    }, 
    "player": { 
    "name": "Player 3" 
    }, 
    "player": { 
    "name": "Player 4" 
    } 
}} 

這裏是代碼..

public static void main(String[] args) { 
     Players xstramAliasObject = new Players(); 
     XStream xstream = new XStream(new JsonHierarchicalStreamDriver()); 
     xstream.setMode(XStream.NO_REFERENCES); 
     xstream.aliasSystemAttribute(null, "class"); 
     xstream.autodetectAnnotations(true); 
     System.out.println("--- "+xstream.toXML(xstramAliasObject)); 
    }