【发布时间】:2014-04-16 07:52:13
【问题描述】:
我想将自定义 Map 序列化为 JSON。
实现map接口的类如下:
public class MapImpl extends ForwardingMap<String, String> {
//ForwardingMap comes from Guava
private String specialInfo;
private HashMap<String, String> delegate;
@Override
protected Map<String, String> delegate() {
return this.delegate;
}
// some getters....
}
如果我现在打电话
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("/somePath/myJson.json"), objectOfMapImpl);
Jackson 将序列化地图并忽略变量specialInfo
我用JsonSerializer 的自定义实现尝试了一些东西,但我最终得到了这个sn-p:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("someModule");
module.addSerializer(CheapestResponseDates.class, new JsonSerializer<MapImpl>() {
@Override
public void serialize(final MapImpl value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException {
CheapestResponseDurations.class);
// how to serialize the map here? maybe be in a data node...
jgen.writeStartObject();
jgen.writeObjectField("info", value.getInfo());
jgen.writeEndObject();
}
});
mapper.registerModule(module);
我正在使用 JDK 1.7 和 Jackson 2.3.1
【问题讨论】:
-
你能改变
MapImpl类吗?这个属性有getter/setter吗? -
可以,它有一个用于 info 属性的 getter。我还为底层地图添加了一个公共方法,用于测试目的。但是 MapImpl 必须实现 Map。
标签: java json serialization jackson