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()