ste
06/23/2024, 9:44 PM{
"value": "{\"real_value\": 100 }"
}
ste
06/23/2024, 9:57 PM@Serializable
data class OuterObject(
@SerialName("value")
@Serializable(with = InnerObjectFromJsonStringSerializer::class)
val value: InnerObject
)
@Serializable
data class InnerObject(
@SerialName("real_value")
val realValue: Int
)
object InnerObjectFromJsonStringSerializer : JsonStringSerializer<InnerObject>(InnerObject.serializer())
open class JsonStringSerializer<T : Any>(private val deserializationStrategy: DeserializationStrategy<T>) : KSerializer<T> {
override val descriptor: SerialDescriptor
get() = TODO("Not yet implemented")
override fun deserialize(decoder: Decoder): T {
return (decoder as JsonDecoder).json.decodeFromString(deserializationStrategy, decoder.decodeString())
}
override fun serialize(encoder: Encoder, value: T) =
TODO("Not yet implemented")
}
ephemient
06/23/2024, 10:16 PMobject InnerObjectFromJsonStringSerializer : KSerializer<InnerObject> by JsonStringSerializer(InnerObject.serializer())
class JsonStringSerializer<T>(private val tSerializer: KSerializer<T>) : KSerializer<T> {
override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor(tSerializer.descriptor.serialName, PrimitiveKind.STRING)
override fun deserialize(decoder: Decoder): T =
(decoder as JsonDecoder).json.decodeFromString(tSerializer, decoder.decodeString())
override fun serialize(encoder: Encoder, value: T) {
encoder.encodeString((encoder as JsonEncoder).json.encodeToString(tSerializer, value))
}
}
ste
06/24/2024, 9:25 AM