Использование JSON.stringify для объекта без сериализатора должно быть помечено как экспериментальное
Используя плагин kotlin 1.3.10 в Android Studio, когда я пытаюсь преобразовать объект простого класса в 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 ответ
Перегрузка 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...
где вы используете это.
Обратите внимание, что быстрый пример, показанный на kotlinx.serialization
Основной файл readme для репозитория GitHub показывает, что при вызове необходимо передавать сериализатор stringify
,