Сериализатор не найден для типа «UUID». Чтобы использовать сериализатор контекста в качестве запасного варианта, явно аннотируйте тип или свойство с помощью @Contextual
Вот мой класс данных:
Код: Выделить всё
@Entity
@Serializable
data class TaskItem(
@Serializable(with = UUIDSerializer::class)
@PrimaryKey val id: UUID = UUID.randomUUID(),
@ColumnInfo(name = "task_title") var title: String,
@Serializable(with = LocalDateTimeSerializer::class)
@ColumnInfo(name = "task_created_at") val creationDate: LocalDateTime,
@ColumnInfo(name = "task_completed") var completed: Boolean = false,
@ColumnInfo(name = "task_tint") var color: Int,
@ColumnInfo(name = "task_description") var description: String = "",
@Serializable(with = UUIDSerializer::class)
@ColumnInfo(name = "task_created_by", defaultValue = "-1") val createdBy: UUID
)
Вот сериализатор:
Код: Выделить всё
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
object LocalDateTimeSerializer : KSerializer {
private val formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME
override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDateTime) {
encoder.encodeString(value.format(formatter))
}
override fun deserialize(decoder: Decoder): LocalDateTime {
return LocalDateTime.parse(decoder.decodeString(), formatter)
}
}
Код: Выделить всё
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import java.util.UUID
object UUIDSerializer : KSerializer {
override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: UUID) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): UUID {
return UUID.fromString(decoder.decodeString())
}
}

Буду признателен за любую информацию по этому поводу. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/787 ... s-database
Мобильная версия