我正在寻找反序列化Generic对象中的JSON字符串。 我的对象的类型在执行时就知道了。
这是我要反序列化的对象:
data class APIResponse<T>(
var list: List<T>? = null
)
所以我创建了几个可以与列表中的对象相对应的类。
我的翻修GET返回此Single<Response<ResponseBody>>
,这样我就可以获取JSON字符串。
这是我从检索数据并反序列化JSON字符串时要做的事情:
@SuppressLint("CheckResult")
fun getJSON() {
service.getJSON<T>()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : DisposableSingleObserver<Response<ResponseBody>>() {
override fun onSuccess(t: Response<ResponseBody>) {
val type = object : TypeToken<APIResponse<T>> (){}.type
val apiResponse = Gson().fromJson<APIResponse<T>>(t.body()?.string(), type)
}
override fun onError(e: Throwable) {
Log.e("api", "fetch error")
}
})
}
我的apiRespone
对象确实包含一个列表,但是具有键值值,而不具有我创建的类的属性。
以下是列表可以包含的类的示例:
data class User(
var pseudo: String = "",
var userName: String = ""
): Serializable
使用上面的代码,我的变量list
充满了LinkedTreeMap变量。我可以将此LinkedTreeMap转换为我的对象User吗?