Suresh Maidaragi
02/08/2024, 8:05 AMKotlin Serialization
but not giving alternative of TypeToken
example use case is I wanted to convert below snippet completely into KMM specific by just using kotlin.serialization
end up seeing typeToken
not found
fun <T : Any> getTypeListv(typeArgument: KClass<T>): KType? {
return TypeToken.getParameterized(List::class, typeArgument).type
}
Joel Denke
02/08/2024, 8:10 AMSuresh Maidaragi
02/08/2024, 8:18 AMfun <T : Any> listToJson(listObj: List<T>?, type: Class<T>): String? {
return try {
gson.toJson(listObj ?: listOf<T>(), getTypeList(type))
} catch (e: JsonParseException) {
PwLog.e("Parse Error (listToJson): Model Class :: $type", e)
String.EMPTY
}
}
fun <T : Any> getTypeList(typeArgument: Class<T>): Type? {
return TypeToken.getParameterized(List::class.java, typeArgument).type
}
Moussa
02/08/2024, 8:19 AM@OptIn(InternalSerializationApi::class)
fun <T : Any> getTypeSerializer(typeArgument: KClass<T>): KSerializer<T> {
val elementSerializer = typeArgument.serializer()
return elementSerializer
}
Usage example:
val stringListSerializer = getTypeSerializer(String::class)
val stringList: List<String> = listOf("a", "b", "c")
val serializedStringList = Json.encodeToString(ListSerializer(stringListSerializer), stringList)
Joel Denke
02/08/2024, 8:21 AMval dataList = listOf(Data(42, "str"), Data(12, "test"))
val jsonList = Json.encodeToString(dataList)
As long as all objects in it is @Serializable, like Data in this sample.Joel Denke
02/08/2024, 8:22 AMMoussa
02/08/2024, 8:25 AMkotlinx.serialization
you don't need that method. My previous answer was a respond to the main question but now that we have more details on your need, we don't need that implementation.