Дезертициализация поля, которое может быть одним из двух типов данных с использованием Moshi

Я получаю JSON с сервера OrientDB, который выглядит примерно так:

{ ... "out": ..., "in": ..., ... } 

Теперь эти два поля и могут быть одного из двух типов: String и моего собственного пользовательского объекта (назовем его Record ). Например, для одного запроса я мог бы получить следующее:

 { ... "out": "#17:0", "in": { ... }, ... } 

Для другого я мог бы получить:

 { ... "out": { ... }, "in": "#18:2", ... } 

И так далее. Оба могут быть String s, оба могут быть Records , один может быть String а другой – Record , et cetera et cetera. Теперь, когда я десериализую этот JSON с помощью Moshi , у меня было бы два параметра и чтобы удерживать значения их соответствующих ключей; однако, поскольку эти значения не являются фиксированным типом данных, это проще сказать, чем сделать.

Создание нескольких POJO (или «POKO», я думаю, потому, что я использую Kotlin) не будет работать, потому что эти объекты можно найти внутри других объектов JSON и тому подобное. Мне нужен один объект, для которого эти параметры могут принимать переменный тип данных. Итак, как бы я это сделал?

Должен ли я написать пользовательский адаптер в Моши для сериализации / десериализации этих значений? Если да, то как я могу начать писать один, который может назначить определенный тип данных в зависимости от значения параметра? Или есть какая-то функция класса / функции / расширения Kotlin, которую я могу найти / написать, которая может содержать два возможных типа данных?

Если это имеет значение, я также использую Retrofit 2 + RxJava 2, чтобы асинхронно выполнять мои HTTP-вызовы, поэтому, если в этих библиотеках есть какие-либо типы данных или функции, которые облегчают что-то подобное, я все уши.

Даже если кто-то может отвечать только на Java, это нормально, потому что я могу сам конвертировать код. И если я пропущу что-то очевидное, извиняюсь заранее.

Intereting Posts
Как расширить dataclass с помощью toString Отображение Firebase в Kotlin-Object не работает IllegalArgumentException: savedInstanceState Указано как Non-Null Null Kotlin – Расходы на более высокие порядки? Изменения в Android Studio 3.0 Kotlin не отражены в сборке Какой язык используется для шаблонов строк kotlin? Kotlin + Dagger2: не может быть предоставлен без конструктора @Inject или из метода @ Provides- или @ Produces-annotated Как создать общий массив, заполненный нулями в Котлине? Android – как реализовать несколько ViewHolder для макета заголовка другого для макета модели в адаптере Firestore RecyclerView Почему этот код не был возвращен на этикетке в Котлине Воспроизведение звуков из сырого файла в Котлине Почему у Котлина нет Десятичной прогрессии? Явный аргумент типа Kotlin и RxJava Двоичная конвертация Int в Float в Котлин java.lang.IllegalArgumentException: параметр, заданный как ненулевой, равен null: метод kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull