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



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

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

[A]的类型将取决于元数据,例如[A]的类名,但就我而言,我不知道如何使用反射进行调用。在c#中,我可以使用反射为extractOpt[A]上的调用设置泛型类型。我担心我的问题与Java类型的擦除有关

我将有很多case类,所以我真的想避免必须从{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上的"提问"按钮会让你立即想到解决自己问题的方法?)

相关内容

  • 没有找到相关文章

最新更新