2010-01-04 121 views
2

如何讓Xstream僅序列化明確註釋的字段並忽略剩餘的字段?Xstream:隱式忽略所有字段

我想序列化一個hibernate持久對象和所有代理相關的字段被序列化,我不想在我的xml中。
例如

<createdBy class="com..domain.Users " reference="../../values/createdBy"/> 

是不是我想在我的XML。

編輯:我不認爲我明確提出這個問題。一個類可以從基類中繼承,在基類上我無法控制基類的屬性(如hibernate的情況)。

public class A { 
    private String ShouldNotBeSerialized; 
} 

public class B extends A { 
    @XStreamAlias("1") 
    private String ThisShouldbeSerialized; 
} 

在當我序列B類此情況下,基類領域ShouldNotBeSerialized也將獲得序列化。這不是我想要的。在大多數情況下,我不會對A類

控制。因此我想默認是忽略各個領域和序列化,我明確指定註釋僅領域。我想避免GaryF正在做什麼,我需要明確指定我需要省略的字段。

+0

你有沒有做到這一點?如果是的話,你可以請你發表答案。我遇到同樣的問題 – 2010-02-06 12:07:25

回答

3

您可以使用@XstreamOmitField批註omit fields。直接從本手冊:

@XStreamAlias("message") 
class RendezvousMessage { 

    @XStreamOmitField 
    private int messageType; 

    @XStreamImplicit(itemFieldName="part") 
    private List<String> content; 

    @XStreamConverter(SingleValueCalendarConverter.class) 
    private Calendar created = new GregorianCalendar(); 

    public RendezvousMessage(int messageType, String... content) { 
     this.messageType = messageType; 
     this.content = Arrays.asList(content); 
    } 
} 
+0

如果您使用註釋,請不要忘記在您的XStream實例上調用autodetectAnnotations(true)。 – Sly 2011-08-03 16:24:57

+0

我不認爲這回答了OP的問題。他希望「隱式」省略,而不必明確註釋每個領域。看到我的答案下面的另一個選項。 – 2013-08-03 20:08:08

1

我想唯一的直接的方式就是潛入寫MapperWrapper並排除你有沒有註釋的所有字段。聽起來像是XStream的功能請求。

2

目前已經爲XStream的人一票:

再次,這是由設計。 XStream是一個序列化工具,而不是數據綁定工具 。它將Java對象序列化爲XML並返回。它 將寫入任何東西到XML中,這是重新創建一個相等的對象圖所必需的。生成的XML可以通過配置 進行一些調整,但這已經是一個附加組件。 喜歡做的事可以通過實現一個自定義映射器來完成,但這是用戶列表的 問題,無法在此處理。

http://jira.codehaus.org/browse/XSTR-569

2

我可以不採取信用爲這個答案,只是分享我所發現的。你可以重寫XStream類的wrapMapper方法來實現你所需要的。

此鏈接詳細解釋:http://pvoss.wordpress.com/2009/01/08/xstream/

這裏,如果你不想讓你的解釋需要的代碼:

您可能需要您實現此代碼之前完成所有的測試因爲默認的XStream對象拋出的異常對於查找拼寫錯誤很有用。