我正在尝试保存一个对象,其中包含使用原始数据存储的列表,但它无法序列化该对象
我已经将
@Serializable
标签添加到数据类中,有多少来源建议,但我仍然收到此错误,我无法使该类密封,因为我需要生成它的对象以传递给另一个类。这是我的代码:
对于我的数据类
@Serializable
@SerialName("SavedEvents")
data class SavedEvents(
val SavedEventsList: PersistentList<Event> = persistentListOf()
)
@Serializable
@SerialName("Event")
data class Event(
@Contextual
val VEvent: VEvent
)
来自序列化器的方法:
override suspend fun writeTo(t: SavedEvents, output: OutputStream) {
val json = Json {
useArrayPolymorphism = true
}
output.write(
json.encodeToString(
serializer = SavedEvents.serializer(),
value = t
).encodeToByteArray()
)
}
确切的错误消息:
kotlinx.serialization.SerializationException: Class 'SmallPersistentVector' is not registered for polymorphic serialization in the scope of 'PersistentList'.
Mark the base class as 'sealed' or register the serializer explicitly.
我找到的解决方案是简单地使用
List
对象而不是 ImmutableList
。这绕过了序列化或反序列化自定义 List 对象的任何需要,如果您将值设置为不可变类型,它仍然应该开箱即用。
@Serializable
@SerialName("SavedEvents")
data class SavedEvents(
val SavedEventsList: List<Event> = persistentListOf()
)
@Serializable
@SerialName("Event")
data class Event(
@Contextual
val VEvent: VEvent
)