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のすべての型は、Nameでコンストラクターを定義するXMLElement抽象クラスから拡張されます。その後、それらはすべて持っています

 List<XMLElement> subElements;

プライベート変数、および彼のゲッター/セッター。

問題は、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 に答える