@Serializable
class Grade(
@Transient val id: Int=-1,
@SerialName("person") val student: Student,
@Required val value: Int = 1
)
public interface KSerializer<T> :
SerializationStrategy<T>, DeserializationStrategy<T>
{
override val descriptor: SerialDescriptor
}
public interface SerializationStrategy<in T> {
public val descriptor: SerialDescriptor
public fun serialize(encoder: Encoder, value: T)
}
public interface Encoder {
public val serializersModule: SerializersModule
...
public fun encodeBoolean(value: Boolean)
public fun encodeByte(value: Byte)
public fun encodeShort(value: Short)
...
}
public interface DeserializationStrategy<out T> {
public val descriptor: SerialDescriptor
public fun deserialize(decoder: Decoder): T
}
public interface Decoder {
public val serializersModule: SerializersModule
public fun decodeBoolean(): Boolean
public fun decodeByte(): Byte
public fun decodeShort(): Short
...
}
object DateAsLongSerializer : KSerializer<Date> {
override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor("Date", PrimitiveKind.LONG)
override fun serialize(encoder: Encoder, value: Date) =
encoder.encodeLong(value.time)
override fun deserialize(decoder: Decoder): Date =
Date(decoder.decodeLong())
}
@Serializable
class Task(
val name: String,
@Serializable(with = DateAsLongSerializer::class)
val date: Date
)