1

Lift-json を使用してシリアライズされた Scala ケース クラスをデシリアライズしたいと考えています。extractOpt[A]私が抱えている問題は、以下のジェネリック メソッド メソッドを呼び出す方法がわからないことです。

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

のタイプは[A]メタデータに依存します。たとえば、のクラス名です[A]が、私の人生では、リフレクションを使用して呼び出しを行う方法を理解できません。extractOpt[A]C# では、リフレクションを使用して呼び出しのジェネリック型を設定するだけです。私の問題は、Java 型の消去に関係しているのではないかと心配しています。

多くのケース クラスを使用する予定なので、{metadata} -> classOf[] から何らかの手作りのマップを作成する必要がないようにしたいと考えています。関連付けられているメタデータを完全に制御できsomeStringます。

この問題が発生した理由を理解するのに役立つ場合は、イベント ソーシングを実装しており、すべての [A] タイプが永続化されたイベントになります。私にできることはありますか?

4

1 に答える 1

5
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 の [質問する] ボタンを押すと、自分の問題の解決策をすぐに思いつくことができるのはなぜですか? ;)

于 2012-02-21T13:32:43.333 に答える