使用GSON反序列化通用类型

时间:2019-04-12 11:41:13

标签: java json kotlin gson deserialization

我已经看到了这个问题:

Deserializing Generic Types with GSON

但是我的用例有所不同,我需要的只是将json转换为T,而不是List<T>或类似名称。 这是我在代码中需要的:

 val type: Type = object : TypeToken<T>() {}.type

然后

Gson().fromJson<T>(json, type)

但是它不起作用。它返回LinkedHashMap或类似的东西,但不返回T表示的类。当我将T替换为实际的类类型时,它可以工作,但对于T则不起作用。有人可以给我一些建议吗?谢谢

2 个答案:

答案 0 :(得分:2)

只需使用Gson().fromJson(json, T.class);不需要TypeToken

答案 1 :(得分:0)

我找到了解决方法: 仅使用T::class.java是不够的,它给了我编译错误:

  

不能将T用作化类型参数。改用班级

所以我不得不找到解决方案,以解决它。我要做的是从此更改函数名称:

fun <T> myFunction

对此:

inline fun <reified T> myFunction

之后,不显示任何编译错误,并且代码可以正常工作 有关此主题的更多信息在这里: Instantiating generic array in Kotlin

反序列化看起来像这样:

 Gson().fromJson(json, T::class.java)