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{