Lift-JSONを使用してJSONとメタデータに基づいてタイプをインスタンス化します

StackOverflow https://stackoverflow.com/questions/9378157

質問

Lift-JSONを使用してシリアル化されたScalaのケースクラスを脱皮したいと思います。私が抱えている問題は、一般的な方法を呼び出す方法がわからないことです extractOpt[A] 以下の方法:

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

タイプの [A] メタデータ、たとえばクラス名に依存します [A] しかし、私の人生では、反射を使用して電話をかける方法を解決することはできません。 C#では、コールのために汎用タイプを設定することができます extractOpt[A] 反射を使用します。私の問題は、Javaタイプの消去と関係があるのではないかと心配しています。

私は多くのケースクラスを持っているので、{metadata} - > classofから何らかの手作りのマップを作成する必要がないことを本当に避けたいです。メタデータが関連するものを完全に制御できます someString は。

それが理解するのに役立つなら どうして 私はこの問題を抱えており、イベントソーシングを実装しており、すべての[a]タイプは永続的なイベントになります。私にできることはありますか?

役に立ちましたか?

解決

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で「質問」ボタンを押すと、自分の問題の解決策を即座に考えることができるのはなぜですか? ;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top