我有一个对象 config ,它有一些属性。我可以导出这个ok,但是,它还有一个与嵌入类相关的ArrayList,当我导出到XML时,我无法显示它。任何指针都会有所帮助。
导出方法
public String exportXML(config conf, String path) {
String success = "";
try {
FileOutputStream fstream = new FileOutputStream(path);
try {
XMLEncoder ostream = new XMLEncoder(fstream);
try {
ostream.writeObject(conf);
ostream.flush();
} finally {
ostream.close();
}
} finally {
fstream.close();
}
} catch (Exception ex) {
success = ex.getLocalizedMessage();
}
return success;
}
配置类 (一些细节被剥离以保持尺寸缩小)
public class config {
protected String author = "";
protected String website = "";
private ArrayList questions = new ArrayList();
public config(){
}
public void addQuestion(String name) {
questions.add(new question(questions.size(), name));
}
public void removeQuestion(int id) {
questions.remove(id);
for (int c = 0; c <= questions.size(); c++) {
question q = (question) (questions.get(id));
q.setId(c);
}
questions.trimToSize();
}
public config.question getQuestion(int id){
return (question)questions.get(id);
}
/**
* There can be multiple questions per config.
* Questions store all the information regarding what questions are
* asked of the user, including images, descriptions, and answers.
*/
public class question {
protected int id;
protected String title;
protected ArrayList answers;
public question(int id, String title) {
this.id = id;
this.title = title;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void addAnswer(String name) {
answers.add(new answer(answers.size(), name));
}
public void removeAnswer(int id) {
answers.remove(id);
for (int c = 0; c <= answers.size(); c++) {
answer a = (answer) (answers.get(id));
a.setId(c);
}
answers.trimToSize();
}
public config.question.answer getAnswer(int id){
return (answer)answers.get(id);
}
public class answer {
protected int id;
protected String title;
public answer(int id, String title) {
this.id = id;
this.title = title;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
}
}
结果XML文件
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_18" class="java.beans.XMLDecoder">
<object class="libConfig.config">
<void property="appName">
<string>xxx</string>
</void>
<void property="author">
<string>Andy</string>
</void>
<void property="website">
<string>www.example.com/dsx.xml</string>
</void>
</object>
</java>
答案 0 :(得分:2)
Xstream从他们的描述中更好地处理了这个问题:
不需要修改对象。序列化内部字段,包括私有和最终字段。支持非公开和内部类。类不需要具有默认构造函数。
答案 1 :(得分:0)
XMLEncoder适用于公共getter和setter:http://www.exampledepot.com/egs/java.beans/WriteXml.html
我想知道,为什么其他属性(比如作者)完全在文件中(?)尝试添加公共getQuestions()
和setQuestions()
方法。