android - Android GSON 自定义反序列化
问题描述
我正在尝试使用 GSON 和 Kotlin 创建自定义反序列化。这是示例代码,但变量test始终为空。知道为什么吗?
// simple class with x property
class TestClass(var x: Int = 1)
// simple deserializer that always returns object with value x = 4444
class TestClassDeserializer : JsonDeserializer<TestClass> {
override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): TestClass {
return TestClass(4444)
}
}
// simple gson object with register adapter
val gson = GsonBuilder()
.registerTypeAdapter(::TestClass.javaClass, TestClassDeserializer())
.create()
// init object using json string
val json = """ {"x": 9} """.trimIndent()
val test = gson.fromJson(json, ::TestClass.javaClass)
知道为什么test总是为空,而不是预期的对象TestClass(4444)。我正在使用最新的 gson 版本2.8.6。
解决方案
问题在于这个表达式的 line::TestClass.javaClass
类型是KFunction1<Int, TestClass>
因为它是一个 TestClass 构造函数方法引用。正确的语法是TestClass::class.java
推荐阅读
- bazaar - git bundle --all 的集市中的等价物是什么?
- javascript - 编写一个返回不同字母组合的函数
- java - 有没有办法只能解析字符串的一部分?
- hyperledger-fabric - 为区块链应用程序制作开发和部署环境。所需工具
- android - 使用 retrofit2 恢复失败的下载
- oracle - 将 Hibernate 与 Spring Boot、Wildfly 和 Oracle DB 结合使用
- ruby - 用多个分隔符拆分字符串
- symfony - 动态服务使用
- r - 选择具有特定列匹配条件的行
- python - 用于登录网站的 Python 脚本不输入登录信息