2010-08-11 38 views

回答

3

有兩種方法我可以考慮這樣做。

第一:

您可以實現自己的Matcher。當你創建它時,你可以將它傳遞給Persister。您的Matcher只需返回一個Transform您感興趣的類型。您的自定義Matcher不匹配的任何類型嘗試默認的。您可能需要查看源代碼並查看DateTransformFloatTransform是如何實現的。他們很短,所以它是完全可行的。只有當您想以特定方式轉換所有類型時,此解決方案纔有用。

二:

創建String元素,將持有序列化的數據。

@Element(name = "myelement") 
private String strMyElement; 

private MyElementType myElement; 

然後使用@Persist和@Validate批註掛鉤序列化過程。

@Persist 
private void persist() { 
    strMyElement = myElement.toString(); 
} 

@Validate 
private void validate() { 
    myElement = myElement.fromString(strMyElement); 
} 

這種方式更多的是黑客攻擊,但是當您只需要在特定情況下重寫默認序列化時,它就很有用。如果您必須爲特定類型的每個實例執行此操作,它可能會很難處理。在這種情況下,我會使用第一種方法。

+0

謝謝Qberticus。好建議 - 將嘗試並更新帖子。 – bschandramohan 2010-08-11 14:38:45

1

Simple使用TransformCache將類型映射到Transformer對象。所以如果提交的是java.lang.Date' type it will use the org.simpleframework.xml.transform.DateTransform`來將Date對象轉換爲String。

我想你必須實現一個自定義的Transformer for Date或原始的long,並(臨時)替換緩存中該類型的默認Transformer。

我還沒有找到任何指導,起草的策略是基於look on the simple sources

+0

謝謝安德烈亞斯。我看的是完全一樣的,但所有的類都是包級別的,因此我不能擴展和替換我只需要的2個轉換方法:(複製我的自定義匹配器的所有類並不是一個好方法。 – bschandramohan 2010-08-11 10:24:41