我的自定义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字符串调用我的反序列化器。所以没有真正发生,但方法被调用。
有什么想法吗?
非常感谢!
答案 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
}
因此,通过这种方法,它只解析了正确的代码片段,现在正在运行。