【问题标题】:How to deserialize an XML file to its own unique class?如何将 XML 文件反序列化为其自己的唯一类?
【发布时间】:2023-07-04 18:08:01
【问题描述】:

我有一个包含车辆数组的 XML 文件,但我需要能够反序列化它并获取每个对象并将其放入自己的车辆中。

例如,这就是我的 XML 文件的样子:

<Vehicle-array>
   <Car></Car>
   <Truck></Truck>
   <Van></Van>
</Vehicle-array>

所以我需要能够将 Car 元素反序列化为 Car 对象而不是 Vehicle 对象。

我可以获得Vehicle[] 的所有内容,每个元素都是特定的Vehicle 类型。

【问题讨论】:

    标签: java polymorphism xstream xml-deserialization


    【解决方案1】:

    将它们全部放入 Vehicle Array 中,然后使用 instanceof 进行投射

    if(a instanceof Car)
        a = (Car) a ;
    else if(a instanceof Truck)
        ...
    

    【讨论】:

    • 我本来打算这样做的,但是这种方法是不是很讨厌?
    【解决方案2】:

    您可以使用 JAXB,但这需要您有一个 XML 模式。从那里您可以运行 xjc 从架构生成 Java 类,然后使用 MarshallerUnmarshaller 接口从 XML 构建对象。

    【讨论】:

    • 我认为他的问题与xstream有关(见标签)
    • @ErikPragt 很好。我以前从未使用过 xstream,所以对此我无能为力。我很想知道它如何处理多态性。我从来没有真正喜欢过 JAXB 的做法。
    • 我看到其他帖子推荐JAXB,但我需要使用XStream。不过谢谢!
    【解决方案3】:

    我认为您需要创建类,并使用注释 @XStreamAlias 注释所有类,如下所示:

    @XStreamAlias("Car")
    class Car { }
    
    @XStreamAlias("Truck")
    class Truck { }
    

    大部分信息都可以在the documentation 中找到。我建议先创建类,然后序列化为 XML,这样更容易进行映射。

    【讨论】:

    最近更新 更多