GSON反序列化ClassCastException

时间:2019-03-19 13:46:45

标签: android generics kotlin gson classcastexception

我正在尝试建立一个将任何对象保存到文件中的类,但我无法弄清楚自己在做什么错。

基本上,我有2个函数来对内容进行序列化和反序列化,如下所示:

conversation-driver

到目前为止,这在很多情况下都有效,例如以inline fun <reified T> writeInCache(content: T, file: File) { val stream = ObjectOutputStream(FileOutputStream(file)) stream.writeObject(Gson().toJson(content, object : TypeToken<T>() {}.type)) stream.close() } inline fun <reified T> readFromCache(file: File): T? { val stream = ObjectInputStream(FileInputStream(file)) val streamObject= stream.readObject() as String stream.close() return Gson().fromJson(streamObject, object : TypeToken<T>() {}.type) as? T } MyClass作为内容。

但是当我尝试发送List<MyClass>类型的内容时,会发生一些非常奇怪的事情。

List<List<MyClass>>

val list: List<List<MyClass>> = readFromCache(file) ?: emptyList() 内,正确读取了泛型的类(readFromCache),该函数返回了一个值,但是当我尝试访问它时(java.util.List<? extends java.util.List<? extends com.project.entity.MyClass>>应该是类型MyClass)我得到了classCastException:

  

ava.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap无法转换为com.project.entity.MyClass

我不理解为什么它不能正确反序列化,因为该类型似乎是已知的,而且我尤其不明白为什么此时会发生异常,而不是在强制转换内容的函数list.first().first()上发生异常进入所需的类型。

我在堆栈上查看了所有类似的问题,但是似乎没有什么可以解决我的问题。

0 个答案:

没有答案