我有以下数据类,它存储两个值JSON和dataType:
data class Datatypeitem(
var json : String = "",var dataType : Class<*> ?= null
)
我以以下方式定义了列表:
val dataTypelist = mutableMapOf<String,Datatypeitem>()
dataTypelist.put( "item_1",Datatypeitem( json1,MyDataType::class.java ) )
dataTypelist.put( "item_2",List<MyDataType>::class.java ) )
请注意,在一种情况下,我使用MyDataType作为数据类型,而在另一种情况下,我使用List
现在,我想遍历每个dataTypelist项目,并将给定数据类型的JSON解析为其模型:
fun init()
{
dataTypelist.forEach {
datatypeitem ->
val model = Gson().fromJson( datatypeitem.value.json,datatypeitem.value.dataType::class.java )
}
}
我正在使用以下模型:
data class datatypeitem(
@SerializedName("sqlId")
val sqlId: String,@SerializedName("name")
val name: String
)
但是我一直收到运行时异常:
Attempted to deserialize a java.lang.Class. Forgot to register a type adapter?
此外,如果是列表,我需要在Gson()。fromJSON(..)上调用toList():
fun init()
{
dataTypelist.forEach {
datatypeitem ->
val model;
if( datatypeitem.value.dataType::class.java is Array )
model = Gson().fromJson( datatypeitem.value.json,datatypeitem.value.dataType::class.java ).toList()
else
model = Gson().fromJson( datatypeitem.value.json,datatypeitem.value.dataType::class.java )
}
}
如何动态传递数据类型并区分它是列表/数组还是直接类?另外,每当我尝试调用toList()时,都会收到一个错误消息,它是未定义的。
如果我直接指定该类,则可以正常工作
var model = Gson().fromJson( json,Datatypeitem::class.java )
或
var model = Gson().fromJson( json,Array<Datatypeitem>::class.java )
但我需要能够将其动态地指定为参数