首頁  >  文章  >  Java  >  如何用Jackson實現不同的屬性名稱進行序列化和反序列化?

如何用Jackson實現不同的屬性名稱進行序列化和反序列化?

Linda Hamilton
Linda Hamilton原創
2024-10-26 05:52:30470瀏覽

How to Achieve Different Property Names for Serialization and Deserialization with Jackson?

使用不同屬性名稱的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn