无需reified,解决Json.encodeToString()类型匹配问题的方法?
解决Kotlin Json.encodeToString 无需reified的类型不匹配问题
方案1:显式传递KType参数
Kotlinx.serialization提供了接收KType的encodeToString重载,你可以让函数接收类型参数来绕过reified限制:
import kotlinx.serialization.KType import kotlinx.serialization.json.Json fun <I> encodeToString(model: I, type: KType): String { return Json.encodeToString(type, model) }
调用时通过createType()生成对应类型:
data class User(val name: String, val age: Int) val user = User("Alice", 30) val json = encodeToString(user, User::class.createType())
方案2:通过反射自动获取类型
如果不想让调用方额外传参,可以利用Kotlin反射获取对象的实际类型(注意:反射会有性能开销,不建议在高频调用场景使用):
import kotlinx.serialization.json.Json import kotlin.reflect.full.createType fun <I : Any> encodeToString(model: I): String { val type = model::class.createType() return Json.encodeToString(type, model) }
这个版本无需额外传参,但仅适用于非空的具体类型;如果处理泛型嵌套或可空类型,需要更复杂的反射逻辑来解析完整类型信息。
内容的提问来源于stack exchange,提问作者Jamshed Alam Qaderi
相关产品推荐
相关产品推荐

