SimpleXml框架 - 嵌入式集合

时间:2011-02-17 10:28:37

标签: java collections xml-serialization simple-framework

我尝试使用简单的序列化嵌入式集合。 例如:

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注释但在这种情况下不知道如何使用它。任何提示?

1 个答案:

答案 0 :(得分:9)

我遇到了同样的问题。我设法让它工作的唯一方法是一个非常俗气的黑客 - 将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是粗略的,但在我的情况下,它是可以忍受的,因为我的课程之外没有任何东西可以消耗它。希望我有一个比这更好的解决方案,但此刻,我很难过。