Jackson JSON自定义反序列化程序对复合对象很糟糕

时间:2011-11-23 19:11:00

标签: json jackson

我的自定义JSON反序列化器出了问题。 我使用Jackson将JSON映射到Java并返回。在某些情况下,我需要编写自己的映射。

我有一个对象(过滤器),它包含一组另一个object(metaInfoClass)。我尝试用Jackson反序列化过滤器,但是我为内部对象实现了一个自己的反序列化器。 JSON看起来像这样:

{     
 "freetext":false,
 "cityName":null,
 "regionName":null,
 "countryName":null,
 "maxResults":50,
 "minDate":null,
 "maxDate":null,
 "metaInfoClasses":
  [
     {
      "id":31,
      "name":"Energy",
      "D_TYPE":"Relevance"
     }
  ],
 "sources":[],
 "ids":[]
}

我的解串器工作正常,找到了所有的字段等。 问题是,以某种方式(不知道为什么)在JSON字符串的其余部分上调用反序列化器,因此sources令牌正在处理,依此类推。 这很奇怪,因为我不想反序列化大对象,而只是内部metaInfoClass

更奇怪的是:CollectionDeserializer类即使在结束后仍然使用json字符串调用我的反序列化器。所以没有真正发生,但方法被调用。

有什么想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我能够找到解决方案。 我修改了实现(在deserialize方法中)以用于以下代码:

JsonNode tree = parser.readValueAsTree();
Iterator<Entry<String, JsonNode>> fieldNameIt = tree.getFields();

while (fieldNameIt.hasNext()) {
  Entry<String, JsonNode> entry = fieldNameIt.next();
  String key = entry.getKey();
  String value = entry.getValue().getTextValue();

  // ... custom code here
}

因此,通过这种方法,它只解析了正确的代码片段,现在正在运行。