Android Moshi 1.9.x无法序列化Kotlin类型

Android Moshi 1.9.x无法序列化Kotlin类型,android,json,robolectric,moshi,Android,Json,Robolectric,Moshi,升级到(从)后,我遇到以下崩溃和堆栈跟踪: 我看到了,但它不适用于我,因为我已经在我的类中添加了相关的@JsonClass(generateAdapter=X)行 我为我的类使用了一个自定义,这样我就可以决定解析哪个子类。然后,如果解析为,我将使用另一个自定义转换器() 这是: 这里是Moshi在: 所以最后,在所有这些文字和信息之后,我不知道我怎么会遇到这次崩溃。我清楚地定义了如何序列化/反序列化我的RankedPlayer类。如果我降级到Moshi 1.8.0,让我的代码库完全保持原样,这个

升级到(从)后,我遇到以下崩溃和堆栈跟踪:

我看到了,但它不适用于我,因为我已经在我的类中添加了相关的
@JsonClass(generateAdapter=X)

我为我的类使用了一个自定义,这样我就可以决定解析哪个子类。然后,如果解析为,我将使用另一个自定义转换器()

这是:

这里是Moshi在:

所以最后,在所有这些文字和信息之后,我不知道我怎么会遇到这次崩溃。我清楚地定义了如何序列化/反序列化我的
RankedPlayer
类。如果我降级到Moshi 1.8.0,让我的代码库完全保持原样,这个崩溃就会消失,一切都会完美地工作

有人有什么想法吗


谢谢

错误消息明确指出
请使用moshi kotlin工件的KotlinJsonAdapter或使用moshi kotlin codegen工件的code gen

根据,如果未使用Moshi的codegen,则必须添加
KotlinJsonAdapterFactory
。这是Moshi 1.9中的一个特定行为变化,根据


并确保您正在使用
实现(“com.squareup.moshi:moshi-kotlin:1.9.1”)

我正在使用改型,我必须执行以下操作:

在build.grade中:

implementation "com.squareup.moshi:moshi-kotlin:$moshiVersion"
在我的存储库中:

val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

val retrofit = Retrofit.Builder()
    .baseUrl(WEB_SERVICE_URL)
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    .build()

那么,您是否遵循了错误消息中的说明<代码>请使用moshi kotlin工件中的KotlinJsonAdapter或使用moshi kotlin codegen工件中的code gen@ianhanniballake我很确定我有。我认为我不需要使用
KotlinJsonAdapterFactory
,因为只有在您不打算使用Moshi的codegen支持时才需要它。我唯一不用Moshi的codegen的地方就是上面列出的6个转换器类。关于Moshi在中的反射/codegen功能的这些信息自1.8.0之前以来没有任何变化,当我降级到这个版本时,我的所有问题都消失了。这非常清楚地表明,如果您没有使用Moshi的codegen,您需要添加
KotlinJsonAdapterFactory
,就像那些特定的转换器一样。这绝对是Moshi1.9.X中的一些变化。是什么让你认为这不适用于你的案例?@ianhanniballake我只是认为我不需要Moshi的Kotlin反射功能,因为文档让它听起来非常可选,例如:“你可以使用反射,codegen,或者两者都使用”。因为我以前不需要它,所以我觉得没有它我还是可以的。。。但我从未见过你链接到CharlesMadere的博客帖子,你是对的。仅仅因为1.8版的旧文档就被卡住了2个小时
implementation "com.squareup.moshi:moshi:1.9.1"
kapt "com.squareup.moshi:moshi-kotlin-codegen:1.9.1"
Moshi.Builder()
    .add(AbsPlayerConverter)
    .add(AbsRegionConverter)
    .add(AbsTournamentConverter)
    .add(MatchConverter)
    .add(RankedPlayerConverter)
    .add(SimpleDateConverter)
    .add(KotlinJsonAdapterFactory())
    .build()
implementation "com.squareup.moshi:moshi-kotlin:$moshiVersion"
val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

val retrofit = Retrofit.Builder()
    .baseUrl(WEB_SERVICE_URL)
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    .build()