Сериализация объекта с помощью члена списка - PullRequest
1 голос
/ 28 января 2011

Учитывая следующие классы:

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, хранящиеся в списке внутри «контейнера»«

1 Ответ

0 голосов
/ 28 января 2011

Код работает нормально для меня, пока я предоставляю геттер для SomeData.data, названного в соответствии с соглашением об именах Java-бинов:

SomeData.getData()

Если я изменю имя геттера, сериализация не будет работать.

...