【发布时间】:2018-02-15 04:54:35
【问题描述】:
我正在尝试将以下对象保存到文件中以供以后使用:
public class Templates implements Serializable {
private List<ReportTemplate> sources;
private List<ReportTemplate> destinations;
public List<ReportTemplate> getSources() {
return sources;
}
public void setSources(List<ReportTemplate> sources) {
this.sources = sources;
}
public List<ReportTemplate> getDestinations() {
return destinations;
}
public void setDestinations(List<ReportTemplate> destinations) {
this.destinations = destinations;
}
}
但是,ReportTemplate 类包含 SimpleStringProperty 和 SimpleObjectProperty 字段。 SimpleObjectProperty 包含一个自定义对象,该对象还包含 Property 字段。
我的所有类都实现了Serializable,但很明显,属性字段不是,在尝试序列化Templates 时会导致很多错误。
我可以在这里做哪些变通方法?我还研究了使用 JAXB API 保存为 XML,但遇到了类似的问题。
在过去的一个小时左右,我已经阅读了有关序列化不可序列化对象的各种问题,但它们都只深入了一层;例如,他们谈论序列化不可序列化的String,而不是也具有不可序列化字段的自定义对象。
如果除了序列化或 XML 之外还有更好的方法来保存这样的对象,我绝对愿意接受建议;我只需要能够写/读这个对象。
编辑:
根据 Vinoth 的回答,我尝试了 Gson,但结果好坏参半。在一个简单的测试中序列化 Templates 对象时一切正常,但是在我的应用程序中使用它时,在编写对象后尝试再次加载对象时出现以下异常:
java.lang.RuntimeException: Unable to invoke no-args constructor for com.sun.javafx.binding.ExpressionHelper<java.lang.String>. Registering an InstanceCreator with Gson for this type may fix this problem.
java.lang.UnsupportedOperationException: Abstract class can't be instantiated! Class name: com.sun.javafx.binding.ExpressionHelper
输出Json出于某种原因添加了“helper”和“observable”键,仅在实际应用中,而不是在测试中。
Templates 对象包含 ArrayLists 的 ReportTemplate 对象,但没有什么是可观察的。
测试中的对象和我的应用程序是相同的,所以我不知道为什么会混淆。
【问题讨论】:
标签: java serialization jaxb