【发布时间】:2021-09-14 15:51:30
【问题描述】:
我正在尝试将 json 解析为 Result 类型的对象,它可以工作,但是当我尝试访问实际对象时它会引发异常
这是我的代码的样子:
val resultsType = object : TypeToken<Result<SomeObject>>() {}.type
val response = gson.fromJson<Result<SomeObject>>(jsonString, resultsType)
assertTrue(response.isSuccess) // it works
response.onSuccess { // throws exception
println(it)
}
这是get的异常:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap incompatible with com.abc.SomeObject
奇怪的是,如果我在 IDE 中调试和检查响应,它会包含所有值。所以,我真的不知道我做错了什么。
【问题讨论】:
-
您的
Gson实例缺少Result解串器支持。 -
那么,我需要手动配置才能正确解析吗?
-
是的,Gson 是一个基于 Java-6 的库,对其基本类型的支持非常有限(Java 8 类型甚至不包括在内,并且应该手动添加,如果必要的;对于 Kotlin
Result等任何其他类型也是如此。其他类型必须通过实现类型适配器工厂(最灵活可靠的解决方案)以及它们各自的序列化器和反序列化器来手动添加。