https://kotlinlang.org logo
Title
v

Vivek Modi

07/21/2022, 7:58 PM
Hey guys what this error means?
Serializer has not been found for type 'ZonedDateTime'. To use context serializer as fallback, explicitly annotate type or property with @Contextual
@Serializable
@Parcelize
data class NearestResult(
    val day: ZonedDateTime,
    val event: String
) : Parcelable
l

Landry Norris

07/21/2022, 7:59 PM
All members of a Serializable class must either be Serializable, or you need to provide some sort of serializer. ZonedDateTime doesn’t have a serializer defined.
v

Vivek Modi

07/21/2022, 8:00 PM
So how can we do that?
I think I got this solution. Hope this will work.
p

pitpit

07/22/2022, 7:02 AM
put this :
object KZonedDateTimeSerializer : KSerializer<ZonedDateTime> {
    override val descriptor: SerialDescriptor =
        PrimitiveSerialDescriptor("ZonedDateTime", PrimitiveKind.STRING)

    override fun serialize(encoder: Encoder, value: ZonedDateTime) {
        encoder.encodeString(value.toString())
    }

    override fun deserialize(decoder: Decoder): ZonedDateTime =
        ZonedDateTime.parse(decoder.decodeString())

}
and after :
@Serializable
@Parcelize
data class NearestResult(
    @Serializable(with = KZonedDateTimeSerializer::class) val day: ZonedDateTime,
    val event: String
) : Parcelable
👍 1