2011-02-17 49 views
10

我嘗試使用簡單的方式序列化嵌入式集合。 例如:SimpleXml框架 - 嵌入式集合

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註釋,但不知道如何在這種情況下使用它。任何提示?

回答

9

我遇到了同樣的問題。我設法實現它的唯一方法是在另一個類中使用一個非常俗氣的hack-wrapping 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> 

在我的情況下,地圖完全是私人我的課(即其他類永遠不要直接與地圖交談),所以我在這裏有這個額外的層的事實並沒有太大的區別。當然,所產生的XML是嚴重的,但對我而言,這又是可以忍受的,因爲我的課外沒有什麼東西在消耗它。希望我有一個比這更好的解決方案,但目前,我很難過。

+0

感謝您的回答!我也想過了:)我設法使用我自己的轉換器序列化這個對象,該轉換器實現了org.simpleframework.xml.convert.Converter接口。但我對這兩種解決方案都不滿意。我希望有一種更簡單的方法來開箱即用。我們正在談論的只是序列化java集合,它不是一個火箭科學:) – 2011-02-22 12:08:55