我必须处理以下场景(其变体)。我的模型类是:
class Car {
String brand;
Engine engine;
}
abstract class Engine {
}
class V12Engine extends Engine {
int horsePowers;
}
class V6Engine extends Engine {
String fuelType;
}
并且我必须对以下输入进行反序列化(不需要序列化支持ATM):
<list>
<brand id="1">
Volvo
</brand>
<car>
<brand>BMW</brand>
<v12engine horsePowers="300" />
</car>
<car>
<brand refId="1" />
<v6engine fuel="unleaded" />
</car>
</list>
我尝试过的内容/问题:
我尝试过使用XStream,但它要求我编写如下标记:
<engine class="cars.V12Engine">
<horsePowers>300</horsePowers>
</engine>
等等。(我不想要<engine>
-tag,我想要<v6engine>
-tag或<v12engine>
-tag。
此外,我还需要能够根据标识符引用“预定义的”品牌,如上面的品牌id所示。(例如,通过在反序列化期间维护Map<Integer, String> predefinedBrands
)。我不知道XStream是否适合这样的场景。
我意识到这可以使用推式或拉式解析器(例如SAX或StAX)或DOM库“手动”完成。然而,我更喜欢一些自动化的东西。理想情况下,我应该能够添加类(比如新的Engine
),并立即开始在XML中使用它们。(XStream绝不是必需的,最优雅的解决方案会赢得赏金。)
https://stackoverflow.com/questions/14053611
复制相似问题