serializersModule

open override val serializersModule: SerializersModule

序列化本对象数据时使用的 SerializersModule. 用于支持多态序列化等. 在序列化时会先使用 PluginData.serializersModule, 再对无法找到 serializer 的类型使用 MessageSerializers.serializersModule.

使用示例

假设你编写了一个类型 ChatHistory 用来存储一个群的消息记录:

data class ChatHistory(
val groupId: Long,
val chain: List<MessageChain>,
)

要在 PluginData 中支持它, 需要首先为 ChatHistory 编写 KSerializer.

一种方式是为其添加 kotlinx.serialization.Serializable:

@Serializable
data class ChatHistory(
val groupId: Long,
val chain: List<MessageChain>,
)

编译器将会自动生成一个 KSerializer, 可通过 ChatHistory.Companion.serializer() 获取.

然后在 PluginData 定义中添加该 KSerializer:

object MyData : AutoSavePluginData("save") {
// 注意, serializersModule 需要早于其他属性定义初始化
override val serializersModule = SerializersModule {
contextual(ChatHistory::class, ChatHistory.serializers()) // 为 ChatHistory 指定 KSerializer
}

val histories: Map<Long, ChatHistory> by value()
}

然而, 即使不覆盖 serializersModule 提供 KSerializer, mirai 也会通过反射尝试获取.

但对于不是使用 @Serializable 注解方式, 或者是 interface, abstract class 等的抽象类型, 则必须覆盖 serializersModule 并提供其 KSerializer.

Since

2.11

See also

SerializersModule