kotlinx.serialization.SerializationException:类“SmallPersistentVector”未在

问题描述 投票:0回答:1

我正在尝试保存一个对象,其中包含使用原始数据存储的列表,但它无法序列化该对象

我已经将

@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.
android kotlin serialization
1个回答
0
投票

我找到的解决方案是简单地使用

List
对象而不是
ImmutableList
。这绕过了序列化或反序列化自定义 List 对象的任何需要,如果您将值设置为不可变类型,它仍然应该开箱即用。

@Serializable
@SerialName("SavedEvents")
data class SavedEvents(
    val SavedEventsList: List<Event> = persistentListOf()
)

@Serializable
@SerialName("Event")
data class Event(
    @Contextual
    val VEvent: VEvent
)
© www.soinside.com 2019 - 2024. All rights reserved.