本文介绍了Kotlin-无法序列化多态类.找不到序列化器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用带有kotlin/native的 kotlinx.serialization 来序列化多态类.我正在使用序列化指南中提供的示例:

I am trying to serialize polymorphic classes using kotlinx.serialization with kotlin/native. I am using the sample provided in the serialization guide:

val module = SerializersModule {
    polymorphic(Project::class) {
        subclass(OwnedProject::class)
    }
}

val format = Json { serializersModule = module }

@Serializable
abstract class Project {
    abstract val name: String
}

@Serializable
@SerialName("owned")
class OwnedProject(override val name: String, val owner: String) : Project()

fun main() {
    val data: Project = OwnedProject("kotlinx.coroutines", "kotlin")
    println(format.encodeToString(data))
}

此代码在JVM上运行时有效,但是在针对 linuxX64 的kotlin本机编译并运行时,会引发错误:

This code works when run with JVM, but when compiled and run with kotlin native for linuxX64 it throws an error:

Uncaught Kotlin exception: kotlinx.serialization.SerializationException: Serializer for class 'Project' is not found. Mark the class as @Serializable or provide the serializer explicitly.
    at kfun:kotlin.Throwable#<init>(kotlin.String?){} (0x294767)
    at kfun:kotlin.Exception#<init>(kotlin.String?){} (0x28ea25)
    at kfun:kotlin.RuntimeException#<init>(kotlin.String?){} (0x28e725)
    at kfun:kotlin.IllegalArgumentException#<init>(kotlin.String?){} (0x28e925)
    at kfun:kotlinx.serialization.SerializationException#<init>(kotlin.String?){} (0x350185)
    at kfun:kotlinx.serialization.internal#[email protected]<*>(){}kotlin.Nothing (0x36fa0d)
    at kfun:kotlinx.serialization#[email protected]<0:0>(){0§<kotlin.Any>}kotlinx.serialization.KSerializer<0:0> (0x3505c8)
    at kfun:kotlinx.serialization.serializer$serializerByKTypeImpl#internal (0x3512d2)
    at kfun:kotlinx.serialization#serializer(kotlin.reflect.KType){}kotlinx.serialization.KSerializer<kotlin.Any?> (0x3503c8)
    ...

我是否错误地理解代码应该在两个平台上都可以正常工作?如何使其在本机上工作?

Do I understand it incorrectly, that the code should be working on both platforms ?How to make it work on native ?

推荐答案

正如我从 github问题当前的局限性.

As i found out from github issues its current limitation.

这篇关于Kotlin-无法序列化多态类.找不到序列化器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 10:30