【问题标题】:Using gson with kotlin.stdlib.Result将 gson 与 kotlin.stdlib.Result 一起使用
【发布时间】: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 等任何其他类型也是如此。其他类型必须通过实现类型适配器工厂(最灵活可靠的解决方案)以及它们各自的序列化器和反序列化器来手动添加。

标签: kotlin generics gson


【解决方案1】:

kotlin.Result@JvmInline value class,所以创建一个 Gson 序列化器将非常重要。数据绑定此类类的最佳选择是使用kotlinx-serialization

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多