11

シンプルを使って埋め込みコレクションをシリアル化しようとしています。例えば ​​:

Map<String, List<MyClass>>

MyClassに必要なアノテーションをすでに追加しました。@ElementMapで試しましたが、機能しません。 Exception in thread "main" org.simpleframework.xml.transform.TransformException: Transform of class java.util.ArrayList not supported

そのちょうどなら

@ElementMap Map<String, MyClass>

それはうまくいきます。埋め込まれたコレクションを処理する方法がわかりません。注釈について@ElementListは知っていますが、この場合の使用方法がわかりません。ヒントはありますか?

4

1 に答える 1

11

私は同じ問題に遭遇しています。私がそれを機能させることができた唯一の方法は、本当に安っぽいハックでした-Listを別のクラスにラップしました。

public class MyWrapper {

    @ElementList(name="data")
    private List<MyClass> data = new ArrayList<MyClass>();

    public MyWrapper(List<MyClass> data) {
        this.data = data;
    }

    public List<MyClass> getData() {
        return this.data;
    }

    public void setData(List<MyClass> data) {
        this.data = data;
    }

}

そして、代わりに

@ElementMap Map<String,List<MyClass>>

...あなたが持っているでしょう:

@ElementMap Map<String,MyWrapper>

私の場合、Map はクラスに対して完全にプライベートです (つまり、他のクラスは Map と直接対話することはありません)。もちろん、生成される XML はひどいものですが、私の場合は、それを消費するクラスの外部に何もないため、耐えられます。これよりも良い解決策があればいいのにと思いますが、現時点では困惑しています。

于 2011-02-22T01:07:51.993 に答える