java - 使用 List 成员序列化对象

标签 java xml-serialization xmlencoder

给定以下类(class):

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 对象?

最佳答案

只要我为根据 java beans 命名约定命名的 SomeData.data 提供 getter,代码就可以正常工作:

SomeData.getData()

如果我更改 getter 的名称,序列化将无法工作。

关于java - 使用 List 成员序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4822783/

相关文章:

Java,使用数据和时间创建文件名

c# - 在使用 XmlSerializer 序列化期间排除对象

java - XMLEncoder 拒绝写入文件

java - 使用 XMLEncoder 序列化 UUID

java - 如何将 Java ZonedDateTime 序列化为 XML 文件

java - 在接口(interface)和抽象类中使用相同的方法

java - $HADOOP_COMMON_HOME 和 $HADOOP_HDFS_HOME 是同一个值吗?

java - 按下多个键时,libGDX InputProcessor 无法正常运行

c# - XML 序列化注释

c# - 使用 XmlSerializer 忽略 .NET 中 Xml 序列化中的属性