Я использую
implementation 'com.google.firebase:firebase-firestore:21.3.1'
для тестирования Firestore-Database SDK с Kotlin в версии 1.3.50.
Для тестов чтения / записи я создал простой класс данных :
data class Location(
val uuid: String? = null,
val name: String? = null
)
, который работает нормально и гладко, как и ожидалось.
Но если немного углубиться в расширение класса данных с помощью запечатанных классов Kotlin, это приводит к проблемам в сериализации. :
data class Location(
val uuid: String? = null,
val name: String? = null,
val locationProperty: LocationProperty? = null
)
sealed class LocationProperty {
data class TextProperty(
val text: String? = null
) : LocationProperty()
}
Хотя запись в базу данных работает по-прежнему нормально, приложение генерирует исключение при сериализации результата:
document.toObject(Location::class.java)
java.lang.RuntimeException: No properties to serialize found
on class com.abc.def.LocationProperty
В интерфейсе Firestore я увидел, что мой запечатанный класс сохраняется как Map
в базе данных № SQL, а необработанные данные полученных DocumentSnapshot
выглядят следующим образом
(locationProperty =>ArraySortedMap{(text=>My entered text)}
, поэтому это может вызвать ошибку.
Есть ли способ решить эту проблему, возможно, предоставив специальный сериализатор при чтении или записи данных в Firestore, если это возможно?