Котлин Десериализовать переменные из абстрактного класса - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть объект, который расширяет абстрактный класс, который наследует интерфейс.При использовании сериализации kotlin он не будет сериализировать свойства абстрактного класса.Например:

@Serializable
class User(private val uid: String): BaseClass()

abstract class BaseClass(): CacheClass {
    override val cacheDate: Long = 0L
}

interface CacheClass {
    val cacheDate: Long
}

Переменная cacheDate никогда не будет сериализована.Как я могу гарантировать, что переменные, определенные в абстрактном классе, будут фактически сериализованы?Я не ищу другие библиотеки для использования.Я использую Kotlin Сериализация найдена здесь

1 Ответ

0 голосов
/ 19 февраля 2019

С https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/examples.md:

Поддерживаемые свойства:

  • Свойства конструктора класса val и var.Конструктор должен иметь только свойства (без параметров).

  • В случае использования внутренней сериализации (аннотации @Serializable для класса), как значения, так и значения в теле поддерживаются любымуровни видимости.

Но cacheDate не является ни тем, ни другим;это свойство тела суперкласса без @Serializable.Вы можете попробовать аннотировать суперкласс, но я ожидаю, что он не сработает, основываясь на описании в предложении ;если это не так, написать собственный сериализатор .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...