マップラッパーテーブルを持つJSONデータモデルを受け取りました。私はジェネリックスを使用して、ラッパーを超えた型で渡すことを試みていますが、実行時にはうまく翻訳できません。 JSONファイルの例を次に示します。Kotlin Gson逆シリアル化
{
"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
}
]
}
私が使用しているラッパークラスは表と呼ばれています。
data class Table<T>(
@SerializedName("Table") val models : Array<T>
)
実際のモデルクラスはPaymentMethodです。
data class PaymentMethod(
@SerializedName("paymentmethod_id") val idNumber : Int = -1
)
私は< T>型を取る一般的なデータ・マネージャ・クラスを作成しました。私は、このような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.ClassCastExceptioを取得しますn:java.lang.Object []はNetworking.PaymentMethod []にキャストできません。私は明示的な型を渡すと、期待どおりしかし、それは動作します - PAYMENTMETHODモデルに配列を解析:私はまだジェネリック型Tを使用する方法の
val table: Table<PaymentMethod> = Gson().fromJson(s)
任意のアイデア?
私は表:: class.javaを使用することができませんでした呼び出すことができます。私はTがコンパイル時には何か言うことができないコンパイラを推測しているので、しかし、それは、(最初の場所でのジェネリック医薬品のポイントのようなものではないのですか?)エラーがスローされます。 –