Моши терпит неудачу на ленивых свойствах Котлина

При десериализации класса с помощью Moshi происходит сбой свойства by lazy с ошибкой:

IllegalArgumentException: No JsonAdapter for interface kotlin.Lazy annotated []

Итак, я хочу сказать Моши, чтобы он не обращал внимания на собственность. Способ игнорировать это, по-видимому, заключается в использовании @Transient, однако он может использоваться только в поле, а не в свойстве.

Итак, как игнорировать ленивые свойства Kotlin при десериализации с помощью Moshi?


person Greg Ennis    schedule 02.03.2018    source источник


Ответы (1)


Вы можете аннотировать самого делегата:

class Foo {
    @delegate:Transient
    val bar by lazy { true }
}
person tynn    schedule 02.03.2018
comment
Спасибо ... хотя это работает, оказывается, что есть еще одна проблема с ленивыми свойствами, которые не инициализируются при десериализации Moshi (NullPointerException) из-за отсутствия конструктора без аргументов. Но это другой вопрос. - person Greg Ennis; 02.03.2018
comment
@GregEnnis Вы когда-нибудь выясняли, как инициализировать делегированные свойства в классах, созданных Moshi во время десериализации? - person Ernest Zamelczyk; 21.12.2018
comment
Я так не думаю. Я действительно хочу, чтобы Моши использовал что-то другое, кроме Transient, которое несет в себе множество других значений. - person Greg Ennis; 22.12.2018
comment
Если это до сих пор проблема, добавьте KotlinJsonAdapterFactory в конструктор moshi при создании адаптера: Moshi.Builder().add(KotlinJsonAdapterFactory()).build().adapter(MyClass::class.java) - person jhavatar; 27.03.2019