-
-
Notifications
You must be signed in to change notification settings - Fork 466
Open
Description
目前最新对于多态,类型都需要明确指定序列化器,要带着KSerialization 到处飘,
项目内的示例无法完成多态的,any类型的序列化与反序列化,这是kotlinx.serialization本身限制
请问有最佳实践吗
class SerializationConverter(
private val format: StringFormat,
private val contentType: MediaType?,
) : JsonConverter {
@Suppress("UNCHECKED_CAST")
override fun <T : Any> convert(
body: ResponseBody,
type: Type,
needDecodeResult: Boolean
): T {
var json = body.string()
if (needDecodeResult) {
json = RxHttpPlugins.onResultDecoder(json)
}
if (type == String::class.java) {
return json as T
}
val serializer = format.serializersModule.serializer(type)
return format.decodeFromString(serializer, json) as T
}
override fun <T : Any> convert(value: T): RequestBody {
val json = when (value) {
is Collection<*> -> {
JSONStringer().setSerializeCallback {
val serializer = format.serializersModule.serializer(it.javaClass)
format.encodeToString(serializer, it)
}.write(value).toString()
}
is Map<*, *> -> {
JSONStringer().setSerializeCallback {
val serializer = format.serializersModule.serializer(it.javaClass)
format.encodeToString(serializer, it)
}.write(value).toString()
}
else -> {
val serializer = format.serializersModule.serializer(value::class.java)
format.encodeToString(serializer, value)
}
}
return json.toRequestBody(contentType)
}
}Metadata
Metadata
Assignees
Labels
No labels