Создание типа на основе json и метаданных с использованием lift-json - PullRequest
1 голос
/ 21 февраля 2012

Я хотел бы десериализовать классы дел Scala, которые были сериализованы с использованием lift-json.Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как вызвать общий метод extractOpt[A] метод ниже:

someString:String = {...}
JsonParser.parse(someString).extractOpt[A]

Тип [A] будет зависеть от метаданных, например, классаИмя [A], но я не могу понять, как сделать звонок, используя рефлексию.В c # я просто смог бы установить общий тип для вызова на extractOpt[A], используя отражение.Боюсь, мои проблемы как-то связаны с стиранием типов Java.

У меня будет много классов дел, поэтому я действительно хочу избежать создания какой-либо карты ручной работы из {metadata} -> classOf [].Я полностью контролирую, что такое метаданные, связанные с someString.

Если это поможет понять , почему У меня есть эта проблема, я использую источник событий, и все мои типы [A] будут постоянными событиями.Есть идеи, что я могу сделать?

1 Ответ

5 голосов
/ 21 февраля 2012
val json:JValue = JsonParser.parse(someString)
//typeName = classCanonicalName, ie this is the metadata
val eventType = Class.forName(typeName) 
val deserialised:Event = Extraction.extract(json, TypeInfo(eventType,None)).asInstanceOf[Event]

А что касается бонусных баллов, почему нажатие кнопки «Задать вопрос» в StackOverflow приводит к тому, что вы мгновенно можете придумать решение своей проблемы?;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...