杰克逊:避免某些领域的反序列化,但不要忽视它们

时间:2016-11-23 15:01:04

标签: java json jackson

我需要携带所有json数据(存储它们,记录,返回),但我永远不会从代码中访问它们。有没有办法避免反序列化它们但仍然在序列化过程中使用它们?

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]}}

然后将其序列化为相同的字符串

更新

我不想忽略这个属性。我需要这些数据。但作为一个字符串,没有完全反序列化的对象

我需要能够做到:

json1 -> object -> json2
json1 == json2

3 个答案:

答案 0 :(得分:5)

看看:JsonProperty.Access

  
      
  • AUTO - 访问设置,这意味着可见性规则将用于自动确定读取和/或写入访问权限   这个属性。

  •   
  • READ_ONLY - 访问设置,表示只能读取属性以进行序列化,但不能在执行期间写入(设置)   反序列化。

  •   
  • READ_WRITE - 访问设置,表示将同时访问属性以进行序列化(将值写为   外部表示)和反序列化(从中读取值)   外部表示),无论可见性规则如何。

  •   
  • WRITE_ONLY - 访问设置,表示只能编写(设置)该属性以进行反序列化,但不会被读取   (get)序列化,即属性的值不是   包含在序列化中。

  •   

所以在你的情况下,你可以像这样使用它:

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

答案 1 :(得分:0)

您可以将类型JSONObject用于Json字段。

Private Sub CheckBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 9 Then
        ComboBox1.Verb
    End If
End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 9 Then
        TextBox1.Verb
    End If
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 9 Then
        CheckBox1.Verb
    End If
End Sub

当你需要阅读它时,你可以将它转换为String(或其他类型)。您可以使用private JSONObject notImportantJsonGarbage; jackson库来实现这一目标。

请注意,当您将gson转换回JsonObject时,结果字符串可能会转义报价。

使用JSONObject还可以解决您对“必须是有效的json对象”的要求。

答案 2 :(得分:0)

您可以对要忽略的属性使用注释@JsonIgnore