【发布时间】:2012-07-16 09:01:51
【问题描述】:
我只对反序列化感兴趣。 我有一些看起来像这样的数据:
<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;
私有变量,以及他的 getter/setter。
问题是Class包含Object子元素以及NotUsedRelations的隐式集合,但Relationship和Objects都是扩展XMLElement,所以我想把它们放在subElements列表中
我用 stream.addImplicitCollection() 和 stream.aliasField() 尝试了不同的方法,但编译器总是报错
一个问题是一个类型是隐式集合而另一个不是,但 NotUsedRelations 没有真正的映射类,应该单独定义为隐式集合的别名。
提前感谢您的帮助!
【问题讨论】:
标签: xml serialization alias converter xstream