2011-07-26 39 views
1

我正在使用XStream來轉換具有java.util.Map類型字段的Java類。我有一個java.util.Map的轉換器,它將Map的鍵值顯示爲xml元素,將map的值顯示爲xml元素的值。我已經使用registerConverter方法註冊了轉換器。當我執行編組時,我得到以下輸出。針對不同字段的同一類(Map.class)的XStream不同的別名

<cart account_id="123" shift_id="456" account_postings_id="641"> 
    <supervisor_id>555</supervisor_id> 
    <payments> 
    <map sequence="1"> 
     <amount>123.45</amount> 
     <billing_method>12345</billing_method> 
     <form>card</form> 
     <delivery_mode>Q</delivery_mode> 
    </map> 
    <map sequence="2"> 
     <amount>123.45</amount> 
     <person_id>2333</person_id> 
     <form>cash</form> 
     <delivery_mode>Q</delivery_mode> 
    </map> 
    </payments> 
    <items> 
    <map sequence="3"> 
     <amount>1.00</amount> 
     <type>pay_toll</type> 
     <toll_id>1234</toll_id> 
    </map> 
    </items> 
</cart> 

而是出現在地圖上的標籤,我想使用基於類的字段名稱不同的標籤。例如,「付款」列表將包含標籤名稱付款,而「物品」列表將爲每個「地圖」元素設置一個標籤名稱項目。

我們如何根據同一個類中的字段動態設置別名?

-Anand

回答

1

我用XStream創建原子飼料報告。內容中的條目可以是不同的對象類,我想動態地使用類名。這是我的解決方案。我創建了ObjectContentConverter並通過了XStream,然後使用xstream.aliasField() with getClass().getSimpleName()

private class ObjectContentConverter implements Converter { 
    XStream xStream; 

    private ObjectContentConverter(XStream xStream) { 
     this.xStream = xStream; 
    } 

    @Override 
    public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { 
     String className = WordUtils.uncapitalize(source.getClass().getSimpleName()); 
     xStream.aliasField(className, Content.class, "objectContent"); 
     xStream.marshal(source, writer); 
    } 

    @Override 
    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { 
     return null; //To change body of implemented methods use File | Settings | File Templates. 
    } 

    @Override 
    public boolean canConvert(Class type) { 
     return true; //To change body of implemented methods use File | Settings | File Templates. 
    } 
} 

xStream.registerLocalConverter(Content.class, "objectContent", new ObjectContentConverter(xStream)); 
+0

感謝日元爲您的答案。 – Anand

相關問題