1

私は次のようなJavaクラスを持っています

public class MyClass {
   private final String str;
   private Polygon polygon; // this polygon is a custom type of mine
}

MyClassXStreamを使用してインスタンスが書き込まれたxmlファイルがあります。

MyClassこれで変更され、ポリゴンがに置き換えられList<Polygon>、フィールドの名前がに変更されました。polygons逆シリアル化を中断しないようにしています。polygonフィールドの逆シリアル化を変更して、基本的にポリゴンを読み取り、新しいリストを作成して単一のポリゴンを追加したいと思います。その場合、リストは新しいフィールド値になります。

この1つのフィールドだけの変換を変更することは可能ですか?または、クラス全体のカスタムコンバーターを作成する必要がありMyClassますか?

ありがとう、ジェフ

4

1 に答える 1

1

あなたのコメントに基づいて、カスタムコンバーターが必要になると思います。

次に例を示します。

import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

public class MyClassConverter implements Converter{

    @Override
    public boolean canConvert(Class clazz) 
    {
        return clazz.equals(MyClass.class);
    }

    @Override
    public void marshal(Object value, HierarchicalStreamWriter writer,
            MarshallingContext context) 
    {

    }

    @Override
    public Object unmarshal(HierarchicalStreamReader reader,
            UnmarshallingContext context) 
    {
        // Create MyClass Object
        MyClass myClass = new MyClass();

        // Traverse Tree
        while (reader.hasMoreChildren()) 
        {
            reader.moveDown();
            if ("polygon".equals(reader.getNodeName())) 
            {
                Polygon polygon = (Polygon)context.convertAnother(myClass, Polygon.class);
                myClass.addPolygon(polygon);
            } 
            reader.moveUp();
        }

        // Return MyClass Object
        return myClass;
    }
}

ご存じない場合は、リファレンス ガイドをご覧ください: http://x-stream.github.io/converter-tutorial.html

あとは、コンバーターを登録するだけです。これは、あなたが方法を知っていることを前提としています。とにかく、注意すべき重要なことは、'addPolygon' が新しいリスト オブジェクトを生成するために使用したメソッドであることです。

于 2011-02-03T19:32:24.380 に答える