【发布时间】:2011-01-27 22:40:27
【问题描述】:
给定以下类:
public class Container {
private List<SomeData> list;
// public getter & setter for list
}
public class SomeData {
private String data;
// public getter & setter for data
}
当我运行以下代码时:
import java.beans.XMLEncoder;
import java.io.FileOutputStream;
SomeData someData1 = new SomeData();
SomeData someData2 = new SomeData();
someData1.setData("data1");
someData2.setData("data2");
List<SomeData> data = new ArrayList<SomeData>();
data.add(someData1);
data.add(someData2);
Container container = new Container();
container.setList(data);
FileOutputStream os = new FileOutputStream("c:\test.xml");
XMLEncoder encoder = new XMLEncoder(os);
encoder.writeObject(container);
encoder.close();
当我查看“test.xml”时,只有容器对象的数据,而列表中的 SomeData 对象没有任何数据(即字符串“data1”和“data2”):
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_22" class="java.beans.XMLDecoder">
<object class="Container">
<void property="container">
<object class="java.util.ArrayList">
<void method="add">
<object class="SomeData"/>
</void>
<void method="add">
<object class="SomeData"/>
</void>
</object>
</void>
</object>
</java>
如何序列化“容器”和存储在“容器”列表中的 SomeData 对象?
【问题讨论】:
-
嗯,显然有一些东西,
SomeData的两个实例,但它们的字段丢失了。 -
仅供参考:这在我的机器上运行良好。另外,我认为您的代码与示例输出不一致。在输出中,您在容器下有属性“容器”,但在示例代码中 - 属性的名称是“列表”。因此,请检查您的代码中的“SomeData”字段设置。
-
是的 - 我手工创建了上面的例子,所以可能会有错误。如果它在您的机器上运行良好,您的意思是您在 xml 中获得了字符串“data1”和“data2”?代码和上面的完全一样吗,还是你调整了?
-
奇怪的是,我上面写的代码确实有效,尽管与原始代码几乎相同。是时候打破差异工具了。
标签: java xml-serialization xmlencoder