Вложенный пользовательский десериализатор 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?

Спасибо!

0 ответов

Другие вопросы по тегам