Jackson 中序列化和反序列化的不同屬性名稱
JSON 屬性在序列化和反序列化期間可以有不同的名稱嗎? Jackson 庫允許這種自訂。
例如,考慮一個座標類別:
<code class="java">class Coordinates { int red; }</code>
從JSON 反序列化時,您需要以下格式:
<code class="json">{ "red": 12 }</code>
但是,在序列化過程中,它的格式應為:
<code class="json">{ "r": 12 }</code>
使用@JsonProperty 註解實現此功能無法按預期工作,因為getter 和setter 具有不同的名稱:
<code class="java">class Coordinates { int red; @JsonProperty("r") public byte getRed() { return red; } @JsonProperty("red") public void setRed(byte red) { this.red = red; } }</code>
這會導致「無法辨識的欄位「紅色」」異常。
要解決此問題,請為getter 和setter 使用不同的方法名稱:
<code class="java">public class Coordinates { byte red; @JsonProperty("r") public byte getR() { return red; } @JsonProperty("red") public void setRed(byte red) { this.red = red; } }</code>
這樣,Jackson 會將屬性識別為不同的字段,允許在序列化和反序列化過程中使用不同的名稱。
例如:
<code class="java">Coordinates c = new Coordinates(); c.setRed((byte) 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.getR());</code>
列印:
Serialization: {"r": 5} Deserialization: 25
以上是如何在 Jackson 中使用不同的屬性名稱進行序列化和反序列化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!