2011-07-29 60 views
4

我有一個模型,看起來像:如何重命名XStream列表元素?

@XStreamAlias("article") 
class Article { 
    List<String> tags; 
    List<String> categories; 
} 

XStream的序列化爲XML,看起來像:

<article> 
    <tags> 
    <string>foo</string> 
    </tags> 
    <categories> 
    <string>bar</string> 
    </categories> 
</article> 

我的問題是我怎樣才能讓這個<string>foo</string>成爲<tag>foo<tag><string>bar</string>成爲<category>bar</category>?我無法更改模型的結構,因爲我正在使用Morphia ODM創建文章實例(文章必須包含List<String>)。

回答

5

This post可能對您有用。

果殼版本:

ClassAliasingMapper mapper = new ClassAliasingMapper(stream.getMapper()); 
mapper.addClassAlias("tag", String.class); 
mapper.addClassAlias("category", String.class); 
stream.registerLocalConverter(Article.class, "tags", new CollectionConverter(mapper)); 
stream.registerLocalConverter(Article.class, "categories", new CollectionConverter(mapper)); 
0

從我的腦海:

@XStreamImplicit(itemFieldName="tag") 
private List<String> categoryList; 

是否行得通?

+2

這是行不通的。這只是刪除父''元素。 – Hokiedood

+0

@Hokiedood對不起,我不知道答案,可能是別人做的 – Omnaest

1

在XStream版本是1.4.5,你需要定義不同類的別名不同的映射對象。解決方案如下:

ClassAliasingMapper mapper = new ClassAliasingMapper(xstream.getMapper()); 

    //tag 
    mapper.addClassAlias("tag", String.class); 
    xstream.registerLocalConverter(
     Article.class, 
     "tags", 
     new CollectionConverter(mapper) 
    ); 


    mapper = new ClassAliasingMapper(xstream.getMapper()); 
      // this is required otherwise it will override the previos mapper 
    mapper.addClassAlias("category", String.class); 
    xstream.registerLocalConverter(
     Article.class, 
     "categories", 
     new CollectionConverter(mapper) 
    );