Gson解析異常com.google.gson.internal.LikedTreeMap connot be case to class

異常

   fun <T> json2List(gson: Gson, json: String?, clazz: Class<T>): List<T>? {
        val typeToken: TypeToken<List<T>> = object : TypeToken<List<T>>() {}
        return try {
            gson.fromJson(json, typeToken.type)
        } catch (e: Exception) {
            null
        }
    }

使用上面的函數(shù)進行解析時出現(xiàn) com.google.gson.internal.LikedTreeMap connot be case to class ,出現(xiàn)這種情況通常是泛型除了問題,由于類型擦除,解析前無法在運行時獲取真正的類型 T。

處理方法

  • 方法一

    fun <T> toList2(json: String?, cls: Class<T>?): List<T> {
        val mList: MutableList<T> = ArrayList()
        try {
            val array = JsonParser().parse(json).asJsonArray
            for (elem in array) {
                mList.add(gson.fromJson(elem, cls))
            }
        } catch (e: Exception) {
        }
        return mList
    }
    

    使用示例:

    val jsonList = "[{\"isSuccess\":false,\"name\":\"a\"},{\"isSuccess\":true,\"name\":\"b\"}]"
    val list4 = GsonKtx.toList2(jsonList,TestBean::class.java)
    println(list4)
    list4.forEach {
      println(it.name)
    }
    
  • 方法二

    fun <T> toList(gson: Gson, json: String?, clz: Class<Array<T>>?): List<T>? {
        return try {
            val ts: Array<T> = gson.fromJson(json, clz)
            mutableListOf(*ts)
        } catch (e: Exception) {
            null
        }
    }
    

    使用示例:

    val jsonList = "[{\"isSuccess\":false,\"name\":\"a\"},{\"isSuccess\":true,\"name\":\"b\"}]"
    val list = GsonKtx.toList(Gson(),jsonList,Array<TestBean>::class.java)
    list.forEach {
         println(it.name)
    }
    

    參考

泛型方法 Gson解析 com.google.gson.internal.LinkedTreeMap cannot be cast to XXX

關(guān)于Gson泛型解析的解決方案

使用 gson,出現(xiàn) LinkedTreeMap cannot be cast to xxx

com.google.gson.internal.LinkedTreeMap

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 當(dāng)用Gson解析泛型會報以下錯誤: com.google.gson.internal.LinkedTreeMap ...
    格老子閱讀 1,836評論 0 1
  • 最近項目進行了一次target sdk的升級28版本的改造,在處理了一些target 版本的Android9.0的...
    zwill閱讀 2,607評論 0 0
  • 做網(wǎng)絡(luò)請求的時候肯定要封裝回調(diào),我這里就傳了泛型,但是出了個問題是Gson沒辦法直接解析泛型,如果直接解析的話,不...
    鍵盤上的麒麟臂閱讀 33,053評論 9 26
  • 如果解析一個json數(shù)據(jù)成一個List,一般的使用方式是不會報錯的。 public List<class> par...
    ldoublem閱讀 13,710評論 2 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,834評論 28 54

友情鏈接更多精彩內(nèi)容