2011-07-29 11 views
4

私がどのように見えるのモデルを持っている:私の質問は<string>foo</string><tag>foo<tag>なり、<string>bar</string><category>bar</category>なるように、私はそれを作ることができる方法であるXStreamリスト要素の名前を変更するにはどうすればよいですか?

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

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

XStreamのは次のようになり、そのXMLにシリアライズ?記事インスタンスを作成するためにMorphia ODMを使用しているため、モデルの構造を変更できません(記事にはList<String>が含まれている必要があります)。私の心のうち

答えて

5

This postが役に立つかもしれません。

一言で言えばバージョン:XStreamのバージョンで

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

を使用すると、別のクラスのエイリアスの異なるマッパーオブジェクトを定義する必要があります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) 
    ); 
関連する問題