我只对反序列化感兴趣。我有一些看起来像这样的数据:
<Data>
<Class name='ClassA'>
<Object name='ObjectA'>
<Relation name='RelationA'>
<toObject name='ObjectB'>
<toObject name='ObjectC'>
</Relation>
</Object>
<Object name='ObjectB'>
<Relation name='RelationB'>
<toObject name='ObjectA'>
<toObject name='ObjectC'>
</Relation>
</Object>
</Class>
<Class name='ClassB'>
<Object name='ObjectC'>
<Relation name='RelationC'>
<toObject name='ObjectB'>
</Relation>
</Object>
<NotUsedRelations>
<Relation name='RelationD'>
<toObject name='ObjectA'>
</Relation>
</NotUsedRelations>
</Class>
</Data>
我想使用 Xstream 来阅读它,但我遇到了 NotUsedRelations 元素的问题:
stream.alias("Data", Model.class);
stream.alias("Class", Model.XMLClass.class);
stream.alias("Object", Model.XMLObject.class);
stream.alias("Relation", Model.XMLRelation.class);
stream.alias("toObject", Model.XMLObject.class);
Model 中的每个类型都从 XMLElement 抽象类扩展而来,该抽象类定义了一个带有 Name 的构造函数。然后他们都有一个
List<XMLElement> subElements;
私人 var 和他的 getter/setter。
问题是 Class 包含 Object 子元素以及 NotUsedRelations 的隐式集合,但是 Relations 和 Objects 都是扩展 XMLElement,所以我想将它们放在 subElements 列表中
我用 stream.addImplicitCollection() 和 stream.aliasField() 尝试了不同的东西,但编译器总是抱怨
一个问题是一种类型是隐式集合而另一种不是,但 NotUsedRelations 没有真正的映射类,应该单独定义为隐式集合的别名。
提前感谢您的帮助!