0

我只对反序列化感兴趣。我有一些看起来像这样的数据:

     <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 没有真正的映射类,应该单独定义为隐式集合的别名。

提前感谢您的帮助!

4

1 回答 1

2

看看这个问题

寻找如下的非注释方式@XStreamImplicit(itemFieldName = ...)

@XStreamAlias("coins")
public class Coins {
        @XStreamImplicit(itemFieldName="coin")
        List<String> coins = new ArrayList<String>();
}

还要看看@XStreamInclude处理子类问题的非注释方式,如:

@XStreamInclude({
        UnionMoveSelectorConfig.class, CartesianProductMoveSelectorConfig.class,
        ChangeMoveSelectorConfig.class, SwapMoveSelectorConfig.class, PillarSwapMoveSelectorConfig.class,
        SubChainChangeMoveSelectorConfig.class, SubChainSwapMoveSelectorConfig.class,
        MoveListFactoryConfig.class, MoveIteratorFactoryConfig.class
})
public abstract class MoveSelectorConfig
于 2013-01-25T10:27:52.950 回答