Вложенный пользовательский десериализатор Jackson не имеет отношения к JsonStreamContext
У меня есть иерархия объектов, ClassA, ClassB, ClassC и пользовательских десериализаторов для ClassB и ClassC. Они назначаются одному ObjectMapper через SimpleModule (Jackson 2.9, если это имеет значение). ClassA десериализуется с использованием стандартного процесса, пользовательский десериализатор для ClassB делает то, что вызывается этим процессом.
Два пользовательских десериализатора расширяют базовый десериализатор, который имеет метод для извлечения объекта ClassA путем обхода текущего контекста с использованием JsonParser.getParsingContext(), JsonStreamContext.getParent() и JsonStreamContext.getCurrentValue().
Я делаю мой анализ с помощью JsonNodes через readValueAsTree().
Моя проблема, когда мне нужен специальный десериализатор для ClassC, который используется для обработки их массива в ClassB. Я перебираю узлы для объектов ClassC, используя:
for (JsonNode cnd : node.get("children")) {
ClassC c = jp.getCodec().treeToValue(cnd, ClassC.class);
bObj.addChild(c);
}
Десериализатор ClassC снова пытается получить объект верхнего уровня, но его нет в контексте синтаксического анализа. Запустив отладчик, JsonParser, переданный в пользовательский десериализатор ClassC, не имеет родителя в своем контексте.
Как я могу заставить мой десериализатор ClassC использовать тот же контекст синтаксического анализа, который используется в ClassB?
Спасибо!