Я пытаюсь сериализовать ArrayList пользовательских объектов в XML с использованием XStream, но я получаю некоторые странные результаты для вывода.
Вот код, который я использую для преобразования,
public void save (String fileName) {
/* 1. Initialize the serializer. */
XStream xstream = new XStream(new DomDriver());
/* 2. Generate the XML string. */
String xml = xstream.toXML(application.getShapes());
/* 3. Print the XML string into a file with the given file name. */
try {
PrintWriter writer = new PrintWriter(fileName);
writer.write(xml);
writer.close();
} catch (Exception ex) {
ex.getMessage();
}
}
и вот ArrayList, который я хочу сериализовать,
/* List of all the shapes drawn on the canvas. */
private ArrayList<Shape> shapes;
и вот вызов метода save,
public void saveClicked() {
application.setSaveNLoadstrategy(new XmlStrategy());
application.save("drawing.xml");
}
и, наконец, вот вывод, который я получаю в файле XML,
<list>
<model.Shape>
<application>
<canvas>
<dirtyBits>0</dirtyBits>
<__geomBounds class="com.sun.javafx.geom.RectBounds">
<minX>0.0</minX>
<maxX>564.0</maxX>
<minY>0.0</minY>
<maxY>200.0</maxY>
</__geomBounds>
<__txBounds class="com.sun.javafx.geom.RectBounds">
<minX>18.0</minX>
<maxX>582.0</maxX>
<minY>100.0</minY>
<maxY>300.0</maxY>
</__txBounds>
<pendingUpdateBounds>false</pendingUpdateBounds>
<parent class="javafx.scene.Node$1">
<value class="javafx.scene.layout.Pane">
<dirtyBits>1024</dirtyBits>
<__geomBounds class="com.sun.javafx.geom.RectBounds">
<minX>0.0</minX>
<maxX>812.0</maxX>
<minY>0.0</minY>
<maxY>400.0</maxY>
</__geomBounds>
<__txBounds class="com.sun.javafx.geom.RectBounds">
<minX>0.0</minX>
<maxX>812.0</maxX>
<minY>0.0</minY>
<maxY>400.0</maxY>
</__txBounds>
<pendingUpdateBounds>false</pendingUpdateBounds>
<parentDisabledChangedListener class="null"/>
<parentTreeVisibleChangedListener class="null"/>
<scene>
<value class="javafx.scene.Scene">
<widthSetByUser>600.0</widthSetByUser>
<heightSetByUser>400.0</heightSetByUser>
Имейте в виду, что размер выходного XML-файла на удивление составляет 64 МБ, поэтому я просто добавил несколько строк!