2011-02-17 13 views
10
denemek

basit kullanarak toplama gömülü serialize için. Örneğin :SimpleXML çerçeve - gömülü koleksiyonları

Map<String, List<MyClass>> 

Zaten ben @ElementMap ile çalıştı Sınıfım gerekli açıklamaları eklendi ama çalışmıyor: Exception in thread "main" org.simpleframework.xml.transform.TransformException: Transform of class java.util.ArrayList not supported

onun sadece

@ElementMap Map<String, MyClass> 

sorunsuz çalışıyor ise . Gömülü koleksiyonla uğraşmaktan bıkmam. Ben yaklaşık @ElementList ek açıklama biliyorum ama bu durumda nasıl kullanılacağını bilmiyorum. Herhangi bir ipucu?

cevap

9

aynı sorunu karşısında geliyorum. Çalışmayı başarabilmemin tek yolu, başka bir sınıfta gerçekten sevimsiz bir hack - sarma listesi olmuştur.

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; 
    } 

} 

Ve sonra, yerine

@ElementMap Map<String,List<MyClass>> 

arasında ... ederdiniz: Benim durumumda

@ElementMap Map<String,MyWrapper> 

, Harita (dersime yani diğer sınıflar tamamen özel olduğunu hiçbir zaman doğrudan Haritaya konuşmayın), buradaki fazladan katmana sahip olduğum gerçeğinin bir farkı olmaz. Elbette üretilen XML, brüt, ama hiçbir şey onu tüketen benim sınıf dışında olduğundan yine benim durumumda, katlanılabilir. Keşke bundan daha iyi bir çözümüm vardı, ama şu anda güldüm. cevap için

+0

teşekkürler! Ben de düşündüm :) Ben hem çözümlere mutlu değilim interface.but org.simpleframework.xml.convert.Converter uygulayan benim kendi dönüştürücü kullanarak bu tür nesne seri başardı. Kutunun dışında yapmak için daha basit bir yol olduğunu umuyorum. Biz sadece java koleksiyonları serileştirme hakkında konuşuyoruz, bu bir roket bilimi değil :) –

+0

Sadece kendi dönüştürücünüzü önerilerinde denedim, aslında iki (daha iyi olmasa bile) daha iyi bir seçenek olduğunu düşünüyorum. En azından dönüştürücü ile, etki alanı nesnelerini diziselleştiriciyi mutlu etmek için yalnızca orada bulunan yapılarla kirletmiyorum: p –