処理List
はXStream
少し注意が必要です。リストを処理するには、リストを保持するラッパークラスを定義する必要があります。例:
public class RectangleList {
private List<Rectangle> rectangles = new ArrayList<Rectangle>();
public List<Rectangle> getRectangles() {
return rectangles;
}
public void setRectangles(List<Rectangle> rectangles) {
this.rectangles = rectangles;
}
}
次にalias
、リストを次のようにRectangleList
クラスに追加します
xstream.alias("list", RectangleList.class);
リストを次のように管理する暗黙のコンバーターを登録します。
xstream.addImplicitCollection(RectangleList.class, "rectangles");
<java.awt.Rectangle>
として印刷する場合は<rectangle>
、以下のようにansエイリアスを登録します。
xstream.alias("rectangle", Rectangle.class);
ここRectangleList
で、変換にクラスを使用します。正常に機能するはずです。
最終的なテストコードは次のようになります。
RectangleList recListInput = new RectangleList();
RectangleList recListOutput = new RectangleList();
XStream xstream = new XStream(new DomDriver());
xstream.alias("list", RectangleList.class);
xstream.alias("rectangle", Rectangle.class);
xstream.addImplicitCollection(RectangleList.class, "rectangles");
ArrayList<Rectangle> rectangleArray = new ArrayList<Rectangle>();
rectangleArray.add(new Rectangle(18,45,2,6));
recListInput.setRectangles(rectangleArray);
String xml = xstream.toXML(rectangleArray);
System.out.println(xml);
xstream.fromXML(xml, recListOutput);
System.out.println("new list size: " + recListOutput.getRectangles().size());
これにより、出力が次のように出力されます。
<list>
<rectangle>
<x>18</x>
<y>45</y>
<width>2</width>
<height>6</height>
</rectangle>
</list>
new list size: 1