使用lift-json实例化基于json和元数据的类型

Noe*_*edy 1 java generics reflection scala lift-json

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

someString:String = {...}
JsonParser.parse(someString).extractOpt[A]
Run Code Online (Sandbox Code Playgroud)

类型[A]将取决于元数据,例如类名,[A]但对于我的生活,我无法弄清楚如何使用反射进行调用.在c#中我只能extractOpt[A]使用反射设置调用的泛型类型.我担心我的问题与Java类型擦除有关.

我将会有很多案例类,所以我真的想避免从{metadata} - > classOf []创建某种手工制作的地图.我可以完全控制与之关联的元数据someString.

如果它有助于理解为什么我有这个问题,我正在实现事件采购,而我所有的[A]类型将成为持久化事件.任何想法我能做什么?

Noe*_*edy 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]
Run Code Online (Sandbox Code Playgroud)

对于奖励积分,为什么按下StackOverflow上的"提问"按钮会让您立即想到解决自己问题的方法?;)