我正在使用Scala编程语言
我想动态地将json反序列化为case类。所以我的v1代码是
protected def DeSerializeJson(json: String): MyClass= {
val gson = new Gson
val response = gson.fromJson(json, classOf[MyClass])
response
}
以上代码仅将json反序列化为MyClass。我想通过其他类型的参数使其可重用于其他类。这样我就可以传递不同的json和不同的类型,它将返回该特定的类对象。但是我无法弄清第二个参数的变量类型以及如何调用它。有人可以帮忙吗?
谢谢
答案 0 :(得分:2)
假设您有三个案例类
case class MyClass(id:String)
case class MyClass2(name : String)
case class MyClass3(age : String)
现在,您可以编写带有附加参数T的自定义函数,该参数将类类型表示为
protected def DeSerializeJson[T](json: String,classType: T) = {
val gson = new Gson
classType match {
case MyClass => gson.fromJson(json, classOf[MyClass])
case MyClass2 => gson.fromJson(json, classOf[MyClass2])
case MyClass3 => gson.fromJson(json, classOf[MyClass3])
}
}
现在,基于我们在方法中作为参数传递的类类型,我们可以对其进行模式匹配以获得所需的结果。
通过使用具有不同参数的功能调用
DeSerializeJson("{ \"id\" : \"101\"}",MyClass)
DeSerializeJson("{ \"name\" : \"Tom\"}",MyClass2)
DeSerializeJson("{ \"age\" : \"12\"}",MyClass3)
我们得到一个输出
res0: Product with Serializable = MyClass(101)
res1: Product with Serializable = MyClass2(Tom)
res2: Product with Serializable = MyClass3(12)