【发布时间】:2019-11-07 10:43:42
【问题描述】:
我有如下数据类,里面存储了两个值,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", DataTypeItem( json1, List<MyDataType>::class.java ) )
请注意,在一种情况下,我使用 MyDataType 作为 DataType,而在另一种情况下使用 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 )
}
}
如何动态传递 dataType 并区分它是 List/Array 还是直接类?此外,每当我尝试调用 toList() 时,都会收到一个未定义的错误。
如果我直接指定类,那么它工作正常
var model = Gson().fromJson( json, DataTypeItem::class.java )
或
var model = Gson().fromJson( json, Array<DataTypeItem>::class.java )
但我需要能够将其动态指定为参数
【问题讨论】:
-
当您收到此错误时,您尝试反序列化的类是什么?
标签: json kotlin gson deserialization