gpt4 book ai didi

android - Kotlin Gson 反序列化

转载 作者:IT老高 更新时间:2023-10-28 13:44:05 29 4
gpt4 key购买 nike

我收到一个带有 map 包装器的 JSON 数据模型。我正在尝试使用泛型来传递超出包装器的类型,但它在运行时不能很好地转换。这是我的 JSON 文件的示例:

{
"Table": [
{
"paymentmethod_id": 1,
"paymentmethod_description": "Cash",
"paymentmethod_code": "Cash",
"paymentmethod_is_ach_onfile": false,
"paymentmethod_is_element": false,
"paymentmethod_is_reward": false,
"paymentmethod_is_openedgeswipe": false,
"paymentmethod_update_user_id": 1,
"paymentmethod_insert_user_id": 1,
"paymentmethod_insertdate": "2014-10-07 14:53:16",
"paymentmethod_deleted": false,
"paymentmethod_is_mobile_visible": true
}
]
}

我使用的包装类叫做 Table。

data class Table<T>(
@SerializedName("Table") val models : Array<T>
)

实际的模型类是 PaymentMethod。

data class PaymentMethod(
@SerializedName("paymentmethod_id") val idNumber : Int = -1
)

我创建了一个采用 类型的通用数据管理器类。我认为使用数据管理器的子类来本地化输入和结果(例如声明模型类 PaymentMethod

open class NXDataManager<T>(manager: NXNetworkManager? = null, rpc : String?, parameters: List<Pair<String, String>>? = null, method : String = "get")
{
...


open fun sendRequest(completionHandler: (models:Array<T>) -> Unit, errorHandler: (error:FuelError) -> Unit) {

val request = NXNetworkRequest(rpc, parameters, method)

request.send(manager, completionHandler = { s: String ->

val table: Table<T> = Gson().fromJson(s)

completionHandler(table.models)

}, errorHandler = errorHandler)
}

inline fun <reified T> Gson.fromJson(json: String) = this.fromJson<T>(json, object: TypeToken<T>() {}.type)

}

我的子类数据管理器指定要解析的模型。

final public class PaymentMethodsDataManager : NXDataManager<PaymentMethod>
{
constructor () : super("genGetPaymentMethods")

}

当我运行代码时:

val table: Table<T> = Gson().fromJson(s)

我收到一条错误消息 java.lang.ClassCastException: java.lang.Object[] cannot be cast to Networking.PaymentMethod[]。但是,当我传入显式类型时,它会按预期工作——将数组解析为 PaymentMethod 模型:

val table: Table<PaymentMethod> = Gson().fromJson(s)

关于如何仍然使用泛型类型 T 的任何想法?

最佳答案

数据类:

data class Table<T>(
@SerializedName("Table") val models : Array<T>
)

转 JSON:

val gson = Gson()
val json = gson.toJson(table)

来自 JSON:

val json = getJson()
val table = gson.fromJson(json, Table::class.java)

关于android - Kotlin Gson 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47944731/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com