JSON字符串在运行时已知的通用类型

时间:2019-12-21 14:44:02

标签: android json kotlin retrofit

我正在寻找反序列化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吗?

0 个答案:

没有答案