Использование 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,

Другие вопросы по тегам