Разбор 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 для получения дополнительной информации.