2012-07-05 1 views
2

Я пытаюсь вывести небольшой граф объектов в JSON с помощью XStream. Только выход, без необходимости де-сериализации.XStream: Omit collection with XStreamImplicit

Объекты очень просты:

@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)); 
    }