У меня есть следующий класс данных, в котором хранятся два значения, 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?
Кроме того, если этосписок, мне нужно вызвать toList () для Gson (). fromJSON (..):
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 и различать, является ли он списком / массивом или классом с прямым доступом? Кроме того, всякий раз, когда я пытаюсь вызвать toList (), я получаю сообщение об ошибке, что оно не определено.
Если я указываю класс напрямую, тогда он работает нормально
var model = Gson().fromJson( json, DataTypeItem::class.java )
или
var model = Gson().fromJson( json, Array<DataTypeItem>::class.java )
, но мне нужно иметь возможность указать его динамически в качестве аргумента