【发布时间】:2021-10-28 13:50:38
【问题描述】:
我在 Kotlin 中有以下代码,我的目标是使用它将任何实例转换为 base64 编码的字符串。同样不起作用,它会引发以下错误:
Serializer for class 'Any' is not found.\nMark the class as @Serializable or provide the serializer explicitly
我该如何解决这个问题?
class SerializerAdapter: SerializerPort {
private val logger: Logger = LoggerFactory.getLogger(javaClass.simpleName)
override fun toBase64(input: Any): String {
try {
val jsonString = Json.encodeToString(input)
return Base64.getEncoder().encodeToString(jsonString.toByteArray())
}catch (ex: Exception) {
logger.error("[BASE64 Error] error converting json object to base64 encoded string: ${ex.stackTraceToString()}")
}finally {
return ""
}
}
}
【问题讨论】:
-
您是否打算仅将
toBase64()用于带有@Serializable注释的对象或任何对象? -
可能只有标有@Serializable 的那些。如果这些是唯一可兑换的,我不会。
-
泛型在这里可能是一个不错的选择,kotlinlang.org/docs/generics.html#generic-functions
-
@undermark5 我尝试过使用泛型类型,但它要求我“重新定义”变量
-
啊,对了,忘了,你需要在运行时拥有类型,而不仅仅是编译时。你可以做
inline fun <reified T>这样做的缺点是你只能在内联函数上具有具体的类型参数,这可能有一些缺点。另一种选择是使用 Json 库,如 Gson、Jackson、Moshi 或许多其他库中的一个,让您的 json 字符串进行编码
标签: kotlin serialization