Аннотации для плагина

@Serializable
class Grade(
    @Transient val id: Int=-1,
    @SerialName("person") val student: Student,
    @Required val value: Int = 1
)

KSerializer

public interface KSerializer<T> : 
    SerializationStrategy<T>, DeserializationStrategy<T> 
{
    override val descriptor: SerialDescriptor
}

SerializationStrategy

public interface SerializationStrategy<in T> {

    public val descriptor: SerialDescriptor

    public fun serialize(encoder: Encoder, value: T)
}

Encoder

public interface Encoder {
    public val serializersModule: SerializersModule
    ...
    public fun encodeBoolean(value: Boolean)
    public fun encodeByte(value: Byte)
    public fun encodeShort(value: Short)
    ...
}

DeserializationStrategy

public interface DeserializationStrategy<out T> {
 
    public val descriptor: SerialDescriptor

    public fun deserialize(decoder: Decoder): T
}

Decoder

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
)