Android GSON 自定义反序列化
Android GSON custom deserialization
我正在尝试使用 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.
问题在行::TestClass.javaClass
此表达式的类型是 KFunction1<Int, TestClass>
因为它是 TestClass 构造函数方法引用。
正确的语法是 TestClass::class.java
我正在尝试使用 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.
问题在行::TestClass.javaClass
此表达式的类型是 KFunction1<Int, TestClass>
因为它是 TestClass 构造函数方法引用。
正确的语法是 TestClass::class.java