简体   繁体   English

使用List成员序列化对象

[英]Serialize an object with a List member

Given the following classes: 给定以下类别:

public class Container {
    private List<SomeData> list;
    // public getter & setter for list
}

public class SomeData {
    private String data;
   // public getter & setter for data
}

When I run the following code: 当我运行以下代码时:

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();

When I review 'test.xml', there is only data for the container object, and nothing for the SomeData objects in the list (ie the strings "data1" & "data2"): 当我查看“ 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> 

How can I serialize 'container' and the SomeData objects stored in the list within 'container'? 如何序列化“容器”和存储在“容器”列表中的SomeData对象?

The code works fine for me as long as I provide getter for SomeData.data named according to the java beans naming convention: 只要我为根据Java bean命名约定命名的SomeData.data提供getter,该代码对我来说就可以正常工作:

SomeData.getData()

If I change the name of the getter, the serialization wont work. 如果我更改吸气剂的名称,则序列化将无法进行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM