如何使用 Kotlinx 序列化对类型化的 class 进行编码?
How can I encode a typed class with Kotlinx Serialization?
我想使用 Kotlinx 序列化 encodeToString
.
对 T: EventData
类型的给定 class 进行编码
这是我的代码:
class EventDispatcher<T: EventData>(
val pubSubTemplate: PubSubTemplate
) {
/**
* Dispatch an event to the game engine event manager pipeline
*/
fun dispatchEvent(event: T, initiator: String) {
val eventData: String = Json.encodeToString(event)
}
编译器告诉我:
Cannot use `T` as reified type parameter. Use a class instead
有没有办法让它仍然有效?
要使 Json.encodeToString(event)
正常工作,它需要 T
的类型信息。但是,由于泛型在 Kotlin/Java.
中的工作方式,此类型信息在运行时会丢失
保留类型信息的一种方法是 making dispatchEvent
an inline function with T
as a reified type parameter。
然而,这也提出了一个问题,你想如何序列化event
。您也可以使用 polymorphic serialization of EventData
,而不是尝试序列化 T
。这将在您的序列化输出中包含一个额外的 class 鉴别器(多态性 serialization/deserialization 必须如此)。
如果序列化 concrete 类型 T
,则不会包含此 class 鉴别器,这是有问题的;反序列化它的人怎么知道它是什么类型?
简而言之,我认为你需要多态序列化。
我想使用 Kotlinx 序列化 encodeToString
.
T: EventData
类型的给定 class 进行编码
这是我的代码:
class EventDispatcher<T: EventData>(
val pubSubTemplate: PubSubTemplate
) {
/**
* Dispatch an event to the game engine event manager pipeline
*/
fun dispatchEvent(event: T, initiator: String) {
val eventData: String = Json.encodeToString(event)
}
编译器告诉我:
Cannot use `T` as reified type parameter. Use a class instead
有没有办法让它仍然有效?
要使 Json.encodeToString(event)
正常工作,它需要 T
的类型信息。但是,由于泛型在 Kotlin/Java.
保留类型信息的一种方法是 making dispatchEvent
an inline function with T
as a reified type parameter。
然而,这也提出了一个问题,你想如何序列化event
。您也可以使用 polymorphic serialization of EventData
,而不是尝试序列化 T
。这将在您的序列化输出中包含一个额外的 class 鉴别器(多态性 serialization/deserialization 必须如此)。
如果序列化 concrete 类型 T
,则不会包含此 class 鉴别器,这是有问题的;反序列化它的人怎么知道它是什么类型?
简而言之,我认为你需要多态序列化。