java - 使用 lift-json 根据 json 和元数据实例化一个类型

标签 java generics scala reflection lift-json

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

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

[A] 的类型将取决于元数据,例如 [A] 的类名,但对于我来说我无法工作了解如何使用反射进行调用。在 c# 中,我只能使用反射为 extractOpt[A] 上的调用设置泛型类型。我担心我的问题与 Java 类型删除有关。

我将有很多案例类,所以我真的想避免必须从 {metadata} -> classOf[] 创建某种手工制作的 map 。我可以完全控制与 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 上的“提问”按钮会让您立即想到解决您自己问题的方法? ;)

关于java - 使用 lift-json 根据 json 和元数据实例化一个类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9378157/

相关文章:

WPF 设计器在解析具有覆盖属性的通用控件时存在错误

java - 从该方法参数的属性获取方法返回类型

scala - => 位于 [] 内是什么意思?

mysql - Scala Slick 元组数据库建模

java - 使用 JRE 路径设置 Eclipse

java - 当我尝试在 Android 应用程序中使用 Javers 时,模块中的重复类错误

c# - 如何使用 lambda 获取作为参数发送的属性名称

scala - 如何在 Play 框架的生产模式中包含文件

java - 明确转换: java时发生未知错误

java - Java中的分布式数据结构