在不使用序列化程序的对象上使用JSON.stringify需要标记为实验性

时间:2018-12-05 21:56:02

标签: android json serialization kotlin

在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

1 个答案:

答案 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时需要传递序列化程序。