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中文网其他相关文章!