在Android Studio中使用kotlin插件1.3.10, 当我尝试将简单类的对象字符串化为JSON时,它将无法编译:
此声明是实验性的,必须使用“ @ kotlinx.serialization.ImplicitReflectionSerializer”或“ @UseExperimental(kotlinx.serialization.ImplicitReflectionSerializer :: class)”标记
@Serializable data class Data(val a: Int, val b: Int)
val data = Data(1, 2)
val x = JSON.stringify(data)
但是,给序列化程序起作用:
val x = JSON.stringify(Data.serializer(), data)
我看不到其他人有这个问题,知道是什么问题吗?我已经在gradle.build中设置了使用序列化。
我通过以下方式导入:
import kotlinx.serialization.*
import kotlinx.serialization.json.JSON
答案 0 :(得分:1)
StringFormat.stringify
的重载并没有在串行化器(SerializationStrategy
中引起)仍在试验中。如果您查看其定义(例如在ctrl中单击并在IDE中单击它),则会看到它的外观如下:
@ImplicitReflectionSerializer
inline fun <reified T : Any> StringFormat.stringify(obj: T): String = stringify(context.getOrDefault(T::class), obj)
ImplicitReflectionSerializer
注释本身在同一文件(SerialImplicits.kt
)中声明的位置:
@Experimental
annotation class ImplicitReflectionSerializer
因此,由于它仍处于实验阶段,因此您需要按照警告中的指示进行操作,即通过在使用时添加@UseExperimental...
之类的注释来告知编译器允许使用实验性功能。 / p>
请注意,kotlinx.serialization
GitHub存储库的主要自述文件中显示的quick example表明,调用stringify
时需要传递序列化程序。