Сериализатор Kotlinx и типы доменов с одним значением - PullRequest
0 голосов
/ 26 апреля 2020

Я люблю использовать типы с одним значением, например, для идентификаторов. Как я могу сказать Kotlinx Serializer рассматривать такие типы как обычные поля, а не объекты?

Пример:

data class User(
    val id: UserId,
    val name: String,
)

должен быть сериализован в:

{
  id: 123,
  name: "foo"
}

и UserId просто data class(val value: Int)?

РЕДАКТИРОВАТЬ: Я думаю, я мог бы использовать собственный сериализатор для каждого класса Id, но я действительно не хочу повторять такой код для каждого идентификатора в мой домен. Кроме того, я не уверен, как написать один; пока мои усилия терпят неудачу.

EDIT2: это моя попытка написать такой сериализатор:

open class DoctorIdSerializer : KSerializer<DoctorId> {
    override val descriptor: SerialDescriptor = PrimitiveDescriptor("id", PrimitiveKind.STRING)

    override fun serialize(encoder: Encoder, value: DoctorId) {
        encoder.encodeInt(value.value)
    }

    override fun deserialize(decoder: Decoder): DoctorId {
        return DoctorId(decoder.decodeInt())
    }
}

в основном, что написано здесь , но оно не работает :(

...