4

カスタムコンバーターでシリアル化された次のクラス (レガシー、注釈不可) があります。

class Test {

    // some other variables

    List<SomeType> someTypeList;

}

SomeType の適切に動作するコンバーターは既に利用可能です。ただし、 @XStreamAlias("someTypes") で注釈が付けられているかのように、リストをシリアル化する必要があります。

最終的に、someTypeList には次の形式が期待されます。

<someTypes class="list-type">
    <someType>
        ....
    </someType>
    ...
</someTypes>

目的の出力を得るには、マーシャル/アンマーシャル メソッドをどのように実装する必要がありますか? context.convertAnother(someTypeList) を呼び出しても、周囲の<someTypes>タグが見つからないため、期待される結果が得られませんでした。

4

2 に答える 2

3

構造を取得するのが賢明です:

<someTypes class="list-type">  
<someType>  
....  
</someType>  
...  
</someTypes>

次のコードを見てください。リストには、次のタグを付ける必要があります。

@XStreamImplicit(itemFieldName="someType")  
List<someType>List;

中身によっては、カスタム コンバーターを作成する必要がある場合があります。これを参照するには、次のように少し変更します。

@XStreamImplicit(itemFieldName="someType")  @XStreamConverter(YourOwnConverter.class)  
List<SomeType> someTypeList;

YourOwnConverter次に、アン/マーシャリングする方法を知っているコンバーター クラス ( ) を作成します。

public boolean canConvert(Class type) 
{
    return type.equals(SomeType.class);
}

public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) 
{
    SomeType mytype = (SomeType) source;
    writer.addAttribute("position", mytype.getPosition());
    writer.setValue(mytype.getId());
}
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) 
{
    SomeType mytype = new SomeType();
    String position =  reader.getAttribute("position");
    ......  
        return mytype ;
}

これを例として使用してください: http://x-stream.github.io/converter-tutorial.html

于 2011-01-18T03:57:54.590 に答える
0

someTypes タグがスキップされる原因となる、構成中に xstream オブジェクトで呼び出される addImplicitCollection はありますか?

于 2010-10-06T13:33:32.653 に答える