Я люблю использовать типы с одним значением, например, для идентификаторов. Как я могу сказать 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())
}
}
в основном, что написано здесь , но оно не работает :(