使用XML序列化具有另一个ArrayList的类的ArrayList

时间:2014-02-03 21:40:29

标签: java xml serialization arraylist

我正在尝试使用XMLEncoder序列化具有另一个ArrayList的类的ArrayList。可以吗?
这是我的代码片段:

public class Model {
    private ArrayList<Student> students;
    private ArrayList<Module> modules;

    //...

    public void saveStudentsXML() throws IOException {
        XMLEncoder encoder=new XMLEncoder(new BufferedOutputStream(new FileOutputStream("students.xml")));
        encoder.writeObject(students);
        encoder.close();
    }
    public void loadStudentsXML() throws IOException {
        XMLDecoder decoder=new XMLDecoder(new BufferedInputStream(new FileInputStream("students.xml")));
        students=(ArrayList<Student>)decoder.readObject();
        decoder.close();
    }
    //this works fine

    public void saveModulesXML() throws IOException {
        XMLEncoder encoder=new XMLEncoder(new BufferedOutputStream(new FileOutputStream("modules.xml")));
        encoder.writeObject(modules);
        encoder.close();
    }
    public void loadModulesXML() throws IOException {
        XMLDecoder decoder=new XMLDecoder(new BufferedInputStream(new FileInputStream("modules.xml")));
        modules=(ArrayList<Module>)decoder.readObject();
        decoder.close();
    }
    //this does not

}

Module类有另一个Student类的ArrayList(每个模块都有一个已注册学生的列表),

private ArrayList<Student> enrolledStudents;

当我查看XML时,似乎没有关于enrolledStudents ArrayList的任何信息。
编辑:我为所有实例变量创建了setter和getter,除了 enrolledStudents ArrayList。据我所知,你不能为ArrayList创建一个setter方法,对吧?有没有其他方法可以让XMLEncoder对其进行编码?

1 个答案:

答案 0 :(得分:0)

好吧,事实证明你可以为ArrayLists创建setter,这只是我以前从未需要做的事情,并且愚蠢地假设它无法完成。 我在意识到我没有为ArrayList创建一个getter或setter之后尝试了这个:

public ArrayList<Student> getEnrolledStudents() {
    return enrolledStudents;
}
public void setEnrolledStudents(ArrayList<Student> enrolledStudents) {
    this.enrolledStudents = enrolledStudents;
}

这是我需要添加到Module类的所有内容,之后它运行良好。