Разбор пустого объекта с kotlinx.serialization - PullRequest
0 голосов
/ 11 июня 2019

Я изо всех сил пытаюсь понять, как разобрать пустой объект {} с экспериментальной библиотекой kotlinx.serialization. Сложность возникает, когда на самом деле ответ API может быть одним из:

{
  "id": "ABC1",
  "status": "A_STATUS"
}

или

{}

Структура данных, которую я использовал в качестве сериализатора:

data class Thing(val id: String = "", val status: String = "")

Это аннотировано @kotlinx.serialization.Serializable и используется в клиентской библиотеке API для разделения между необработанным ответом API и моделью данных. Значения по умолчанию сообщают библиотеке сериализации, что поле является необязательным, и заменяет подход @Optional до Kotlin 1.3.30.

Наконец, парсер kotlinx.serialization.json.Json, который я использую, имеет конфигурацию, примененную с использованием шаблона nonstrict.

Как определить сериализатор, который может анализировать как пустой объект, так и ожидаемый тип данных с помощью kotlinx.serialization? Нужно ли мне писать свой KSerialiser или есть конфигурация, которую мне не хватает. В идеале пустой объект должен игнорироваться / анализироваться как null?

Ошибка, которую я получаю при разборе пустого объекта с моим Thing классом данных:

Field 'id' is required, but it was missing

1 Ответ

0 голосов
/ 16 июня 2019

Таким образом, это было до kotlinCompilerClasspath, имеющего другую версию kotlin (1.3.21, а не 1.3.31).

Интересно, что это произошло из-за совета, которому я следовал при настройке моего проекта подключаемого модуля Gradle для не указать версию для плагина kotlin-dsl.

Явно полагаясь на нужную мне версию, исправлено поведение kotlinx.serialisation (без изменений в основном коде)

...