使用JsonSerializers时具有序列化上下文

时间:2013-08-22 15:56:38

标签: java json jackson

我正在序列化一个复杂的树,注册了很多JsonSerializers,我错过了一个可用于存储数据的上下文。例如,假设您需要对树中的节点进行本地化,并且必须根据正在序列化的树中的当前位置来组合本地化键。知道怎么做吗? JsonGenerator和SerializerProvider没有提供类似的东西。

@Override
public void serialize(TreeSection value, JsonGenerator jgen, SerializerProvider provider) {
    // MISSING some kinda context here
}

2 个答案:

答案 0 :(得分:1)

最好的办法是使用ThreadLocal传递此类信息。

你还可以在https://github.com/FasterXML/jackson-databind/issues请求添加一些有限形式的上下文存储 - 这听起来像是一个合理的请求。

答案 1 :(得分:0)

我能够将属性与杰克逊2.7.3一起使用(不确定线程​​安全性,因为我每次都创建一个新的映射器):

public ObjectWriter getWriter() {
   Map<String, String> map = new HashMap<>();
   map.put("my.msg", "message");
   map.put("my.msg2", "message2");
   return new ObjectMapper().writer().withAttributes(map);
}

在序列化程序类中:

@Override
public void serialize(TreeSection value, JsonGenerator jgen, SerializerProvider provider) {
    String msg = (String) provider.getAttribute("my.msg");
}

更新: 在序列化中嵌套多个对象时,无法正常工作。好像属性仅传递给序列化的第一个对象。 似乎与https://github.com/FasterXML/jackson-databind/issues/1991

有关