在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
的超载StringFormat.stringify
它不接受序列化器(SerializationStrategy
)仍处于实验阶段。如果您查看它的定义(例如,在 IDE 中按住 ctrl 键并单击它),您将看到它如下所示:
@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...
你在哪里使用它。
请注意,简单的例子 https://github.com/Kotlin/kotlinx.serialization#quick-example显示在kotlinx.serialization
GitHub repo 的主自述文件显示调用时需要传入序列化器stringify
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)