Java - 如何将复杂对象(不可序列化)保存到文件中?

标签 java serialization jaxb

我正在尝试将以下对象保存到文件中以供以后使用:

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 类包含 SimpleStringPropertySimpleObjectProperty 字段。 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 对象包含 ReportTemplate 对象的 ArrayLists,但没有任何可观察到的内容。

测试中的对象和我的应用程序是相同的,所以我不知道为什么它会变得困惑。

最佳答案

使用 Gson ( https://github.com/google/gson ) toJson() 和 fromJson() 方法将 Java 对象转换为 JSON 字符串。您可以将 json 字符串保存到 xml

序列化:

Gson gson=new Gson();
String  templateJson=gson.toJson(templateObj);

反序列化:

String templateJson="{.....}"
Templates template = gson.fromJson(templateJson, Templates.class);

关于Java - 如何将复杂对象(不可序列化)保存到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48800157/

相关文章:

java - HashSet add(Object o) 错误

xml - 防止 IEnumerable 和 ICollection<T> & 继承类型的 XML 序列化

java - 无法使用 Jackson XML 直接在根元素内反序列化列表

json - Knockout JS - 将类序列化为 JSON

java - JAXB 编码/解码 NullpointerException 困境

java - 如何帮助 JAXB 解码器在两个相似的类之间正确选择

java - 在 JEE Restful Web 服务和 Android 之间使用相同的 API 解析数据的最佳方法是什么?

Java Selenium : open new tab

java - 对象中一个变量的 Gson 自定义解串器

java - 消息源找不到 key