jackson中键/值对的序列化?
我上课了
class Foo { String key; String value; }
并希望将其序列化为"":""
如何实现这一目标(以及如何将"myKey":"myVal"
反序列化为Foo
对象?
我试图用
@JsonValue public String toString() { return "\"" + key + "\":\"" + value + "\""; }
但显然最终会有太多的引用。
@JsonValue public String toString() { return key + ":" + value; }
也不起作用,因为它没有创建足够的报价。
我找到了一种方法,就是使用像这样的JsonSerializer:
public class PropertyValueSerializer extends JsonSerializer { @Override public void serialize(Foo property_value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { jsonGenerator.writeStartObject(); jsonGenerator.writeFieldName(property_value.getKey()); jsonGenerator.writeString(property_value.getValue()); jsonGenerator.writeEndObject(); }
Foo
类需要知道这个:
@JsonSerialize(using = PropertyValueSerializer.class) public class Foo {
反序列化非常相似:
public class PropertyValueDeserializer extends JsonDeserializer { @Override public Foo deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { String tmp = jsonParser.getText(); // { jsonParser.nextToken(); String key = jsonParser.getText(); jsonParser.nextToken(); String value = jsonParser.getText(); jsonParser.nextToken(); tmp = jsonParser.getText(); // } Foo pv = new Foo(key,value); return pv; }
这也需要在Foo类上注释:
@JsonSerialize(using = PropertyValueSerializer.class) @JsonDeserialize(using = PropertyValueDeserializer.class) public class Foo implements Serializable{