Разбор JSON с интерфейсом / чертой и различными реализациями

В настоящее время я использую lift-json разобрать JSON на объекты. Эту подпись я обычно использую

net.liftweb.json.parse(json).extract[MyClass]

Это работает нормально. Тем не менее, я хочу сделать немного больше. Допустим, у моего класса есть объект типа List[SomeTrait] где SomeTrait это trait, И у меня есть две разные реализации этой черты с разными сигнатурами конструктора, но очевидно, что одни и те же методы реализуются по-разному.

Есть ли способ в JSON или коде, который определит, какую реализацию он должен использовать? Таким образом, код синтаксического анализа json может остаться прежним, но я могу продолжать добавлять новые реализации SomeTrait

1 ответ

Решение

Насколько я знаю, в Lift нет простого способа сделать это. Вам все еще нужно иметь некоторый атрибут, чтобы иметь возможность предоставлять информацию о типе самого объекта JSON, чтобы десериализатор мог подобрать подходящий экземпляр.

Я бы использовал Джексона JsonTypeInfo аннотация для того, чтобы отметить подклассы, а затем использовать его ObjectMapper сделать работу.

Посмотрите https://github.com/FasterXML/jackson-annotations для получения дополнительной информации.

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