2011-07-26 79 views
1

如何告訴Jacksons ObjectMapper序列化我自己的類?我必須提供序列化程序嗎?Jackson 1.8.0 ObjectMapper序列化/反序列化任意類

請看下面的例子:

public class MyType { 
    private int a; 
    private String b; 
    // Getters and Setters 
} 

// TODO: configure ObjectMapper, such that the following is true: 

objectMapper.canDeserialize(type) 

我相信這是傑克遜自動做的一切的一種方式,而不指定反序列化「戰略」作爲的MyType的系列化已經工作。

感謝您的幫助!

回答

2

我的自定義類遇到了問題,因爲它具有不確定的setter方法。如果你使用@JsonSetter作爲setter的方法註釋onoe,那麼一切都是正確的。

public class MyType { 
    private int a; 

    @JsonSetter 
    public void setA(int a) {...} 

    public void setA(String a) {...} 
} 

沒有objectMapper.deserialize(...)失敗的註解。在內部拋出一個可以給你更多信息的exeption,但是它被捕獲並且只有false被返回。

+0

這對傑克遜來說會很好,因爲這樣做可以將多個JSON數據類型(JSON數字,字符串,對象,數組)映射爲POJO。我認爲這個領域也有一個RFE。 – StaxMan

4

是的,它可以序列化沒有自定義序列化器的POJO。 但在你的情況下,問題是你的所有屬性都是「隱藏的」。默認情況下,傑克遜會尋找:

  • 公共領域和getter(的getXxx())
  • 塞特斯(的setXXX())的任何知名度

爲了讓傑克遜使用私有字段,你可以註釋的他們與@JsonProperty,或更改默認可見性檢查級別,如果你想要找到所有私人(或保護,包可見)字段。 這可以通過註釋(@JsonAutoDetect)或通過定義全局可見性檢查器來完成。