1

我想反序列化已使用 Lift-json 序列化的 Scala 案例类。我遇到的问题是,我不知道如何调用extractOpt[A]下面的通用方法方法:

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

的类型[A]将取决于元数据,例如类名,[A]但对于我来说,我无法弄清楚如何使用反射进行调用。在 c# 中,我只能为extractOpt[A]使用反射的调用设置泛型类型。我担心我的问题与 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 回答