【问题标题】:XStream: Omit collection with XStreamImplicitXStream:使用 XStreamImplicit 省略集合
【发布时间】:2012-07-05 14:37:56
【问题描述】:

我正在尝试使用 XStream 将一个小对象图输出到 JSON。只需要输出,不需要反序列化。

对象很简单:

@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,像这样初始化:

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

我的例子有什么问题?

提前致谢! 问候,迈克尔

【问题讨论】:

    标签: java json list xstream


    【解决方案1】:

    我使用的是同一个库,但得到了整个消息..

    {"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));
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2010-12-16
      • 1970-01-01
      • 2013-11-01
      • 2014-10-03
      • 1970-01-01
      • 2013-04-22
      相关资源
      最近更新 更多