首页 > 解决方案 > 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

标签: androidkotlingson

解决方案


问题在于这个表达式的 line::TestClass.javaClass 类型是KFunction1<Int, TestClass>因为它是一个 TestClass 构造函数方法引用。正确的语法是TestClass::class.java


推荐阅读