2016-11-23 80 views
1

我需要攜帶所有json數據(存儲它們,記錄,返回),但我永遠不會從代碼中訪問它們。有沒有什麼辦法可以避免反序列化他們,但仍然在序列化中使用它們?Jackson:避免一些字段的反序列化,但不會忽略它們

class MyObject {  
    int importantField; // i want this field to be properly deserialized 
    String notImportantJsonGarbage; // i don't care what's here. it must be a valid json 
} 

所以現在我希望能夠從

{"importantField":7, "notImportantJsonGarbage":{"key1":3, "key2":[1,2,3]}} 

反序列化,後來它序列相同的字符串

UPDATE

我不想要忽略這個屬性。我需要這些數據。但作爲一個字符串,而不是完全反序列化對象

我需要能夠做到:

json1 -> object -> json2 
json1 == json2 
+0

你嘗試使用的JSONObject類型正如我在答覆中提到?我認爲這解決了你的問題。你可以閱讀到一個JSON對象,並只在需要時才反序列化它。 – gaganbm

回答

2

看看:JsonProperty.Access

  • AUTO - 訪問設置哪些意味着可見性規則將被用於自動確定此屬性的讀取和/或寫入訪問權限 。

  • READ_ONLY - 訪問設置,這意味着該屬性可以只讀序列化,但在
    反序列化不寫(套)。

  • READ_WRITE - 訪問設置,意味着該屬性將兩個序列進行訪問(寫出來的值作爲 外部表示)和反序列化(讀取來自
    外部表示的值),而不管可見性規則。

  • WRITE_ONLY - 訪問設置,這意味着,物業只可寫(設置)用於反序列化,但也不會被讀取 (獲得)的序列化,也就是屬性的值不是 包含的在系列化。

所以你的情況,你可以使用這樣的:

@JsonProperty(access = Access.READ_ONLY) 
private String notImportantJsonGarbage; 
+0

但這種方式'notImportantJsonGarbage'是'null'。因此缺少信息並且我的要求**並稍後將其序列化爲相同的字符串**不符合 – piotrek

0

您可以使用類型爲JSONObject json的領域。

private JSONObject notImportantJsonGarbage; 

而當你需要閱讀它時,你可以將它轉換爲字符串(或其他類型)。您可以使用jacksongson庫來實現。

請注意,當您將JsonObject轉換回String時,結果字符串可能會將引號轉義。

使用JSONObject也解決了'必須是有效的json對象'的要求。

0

您可以使用註釋@JsonIgnore了,你希望忽略的財產

相關問題