使用不同屬性名稱的JSON 序列化/反序列化
Jackson 庫提供了在序列化和反序列化期間為屬性指定不同名稱的彈性。考慮以下場景:
您有一個名為「座標」的類,其中包含「紅色」欄位。在 JSON 反序列化期間,您希望將此欄位對應到屬性名稱「red」。但是,在序列化過程中,您希望屬性名稱為“r”。
解決方案
要實現此目的,您可以使用@JsonProperty 註解以及不同的方法getter 和setter 的名稱:
public class Coordinates { private int red; @JsonProperty("r") public int getRed() { return red; } @JsonProperty("red") public void setRed(int red) { this.red = red; } }
透過為getter 和setter 使用不同的方法名稱,Jackson 將它們識別為不同的屬性。在反序列化期間,它使用 @JsonProperty("red") 註解將 JSON 屬性「red」對應到 setter。在序列化過程中,它使用帶有 @JsonProperty("r") 註解的 getter 來檢索值並將其序列化為屬性“r”。
示例
為了說明這種行為,請考慮以下測試代碼:
Coordinates c = new Coordinates(); c.setRed(5); ObjectMapper mapper = new ObjectMapper(); System.out.println("Serialization: " + mapper.writeValueAsString(c)); Coordinates r = mapper.readValue("{\"red\":25}", Coordinates.class); System.out.println("Deserialization: " + r.getRed());
輸出:
Serialization: {"r":5} Deserialization: 25
如您所見,使用了屬性名稱「red」反序列化期間使用屬性名稱「r」。
以上是如何用Jackson實現不同的屬性名稱進行序列化和反序列化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!