異常
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