代码之家  ›  专栏  ›  技术社区  ›  Tor Langballe Bhoopi

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

  •  1
  • Tor Langballe Bhoopi  · 技术社区  · 6 年前

    在Android Studio中使用kotlin插件1.3.10, 当我试图将一个简单类的对象字符串化为JSON时,它不会编译:

    此声明是实验性的,其用法必须标记为“@kotlinx.serialization.隐式引用序列化程序”或“@useterical(kotlinx.serialization.隐式引用序列化程序::类)”

    @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 回复  |  直到 6 年前
        1
  •  2
  •   Yoni Gibbs    6 年前

    超载 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... 你用它的地方。

    请注意 quick example 显示在 kotlinx.serialization GitHub repo的主自述文件显示,在调用 stringify .