【问题标题】:Java: Serialize a Collection XMLJava:序列化集合 XML
【发布时间】:2010-02-01 19:33:52
【问题描述】:

每次我搜索有关如何序列化为 XML 的内容时,我都会找到 bean 序列化程序。似乎所有东西都必须被声明为财产,这违背了我的目的。我想在 XML 中序列化复杂的层次结构(当然,直到它们到达原语),从(比如)一个 Dictionary 或 List 作为父对象开始。

自动 XML 序列化有哪些选项?

我从 2004 年发现了一些对 JAXB 的引用,这仍然是要走的路吗?

【问题讨论】:

    标签: java xml object-serialization


    【解决方案1】:

    试试XStream 库。它可以轻松地序列化您可以扔给它的任何复杂对象层次结构。

    【讨论】:

    • 很有趣,也许可以。虽然我喜欢内置 Java 的东西,但易用性是重点。
    【解决方案2】:

    我在 JAXB 方面取得了很大的成功,尤其是在 NetBeans 中使用对它的支持时。我知道它支持列表的事实。我没有用地图尝试过,但我怀疑它有效。如果没有别的,只需制作一个包含列表的简单 bean 并将其作为序列化 bean。

    【讨论】:

    • 对 JAXB 是的 - 它仍然是要走的路。
    • 其实重读你的问题,你是说你不提前知道你的数据会包含什么样的结构?
    • 是的,但我知道包含所有其他内容的类的类型。
    • 如果您可以为您的文档类型编写一个明确的模式,那么 JAXB 应该能够处理它。它可能会有点混乱,但它应该能够处理它。例如,您可能必须将其声明为包含 0..n 个 ContainerTypes、0..n 个 IntContainerTypes、0..n 个 StringContainerTypes 等的元素 ContainerType,具体取决于您正在做什么。
    【解决方案3】:

    您可以使用standard java.bean.XMLEncoder / Decoder 类来序列化集合,因为该机制允许通过 XML 调用方法。输出看起来像 something

    <object class="java.util.ArrayList">
      <void method="add">
        <string>Hello</string>
      </void>
      <void method="add">
        <string>World</string>
      </void>
    </object>
    

    这当然有弱点;例如,您不能轻易地序列化 Collections.emptyXXXX(),但有一些变通方法。但是因为一切都根据类的公共支持的 API 进行,所以持久的 XML 表单能够适应模式的变化。

    我发现它是一种非常有用的 Java 对象持久性机制。

    【讨论】:

    • 嗯嗯...我最后一次测试它,它没有工作。如果可以,我会再试一次并为你投票。
    • 那我的赞成票在哪里?我知道它有效,因为我已经基于它编写了系统 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多