【问题标题】:Java serialization to XMLJava 序列化为 XML
【发布时间】:2013-11-19 22:14:30
【问题描述】:

我目前正在使用默认的 Java 序列化机制序列化我的 Java 实例。我想切换到另一种独立于 Java 版本的格式。我考虑过使用 JAXB,但我认为我遇到了重复问题。特别要考虑以下几点:

A a = new A();
B b = new B();
C c = new C();
a.c = c;
b.c = c;

如果我要使用默认的 Java 序列化机制来序列化 a 和 b,我最终只会得到一个 c 实例。 JAXB 会序列化两次(除非我弄错了,请纠正我)。

这里对我来说最好的选择是什么?有没有其他方法可以将我已经序列化的实例转换为 XML?

【问题讨论】:

  • 你是对的,你会得到多个实例。但是,除了一些错误之外,java 序列化 独立于 java 版本,所以我不清楚你为什么要切换。
  • 正如@jthalborn 所写,java 序列化在java 版本上相当稳定。如果您的对象发生更改并且您没有设置序列化 id 来控制兼容性,则会出现大多数问题。此外,当然,它绝不是可移植的。

标签: java xml serialization jaxb duplicates


【解决方案1】:

您可以编写自己的序列化器/反序列化器。但是要达到您想要的,您必须将每个c 的状态保留为c 中的XML。

您可以像这样在对象中实现getXml() 方法

Node getXml() {
    if( this.nodeCache == null ) 
        ... create nodeCache node from c ...

    return this.nodeCache;
}

要构建您的 XML,您需要将每个子对象请求为一个节点并将其链接到最终的 DOM 树中。然后将 DOM 写入磁盘。

这里的复杂性是当您的节点缓存脏时在您的应用程序中找到正确的位置。我不知道周围是否有任何自动序列化程序支持你。

【讨论】:

    【解决方案2】:

    “简单的XML序列化”项目

    查看Simple XML Serialization 项目。将对象的数据写入存储确实是一种非常简单的方法,如果需要,稍后再将这些数据重新水合到对象中。

    比 JAXB 简单得多。通过查看文档中的示例,您可以在几分钟内开始使用。 “简单”适用于不需要 JAXB 的所有功能和灵活性的简单情况。

    我在使用这个可靠的库时唯一的挫败感是它的特定名称带来的谷歌搜索困难。

    【讨论】:

    • 亲爱的投票者,请在投票的同时留下评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2012-06-21
    相关资源
    最近更新 更多