Kotlin 序列化未应用于模块

Kotlin Serialization is not applied to the module

提问人:Antonio 提问时间:11/10/2023 更新时间:11/12/2023 访问量:129

问:

在我的项目中,我需要使用 Kotlin.Serialization,因此通过记录我自己,我看到了如何导入插件。

在这里是块。build.gradle(project)plugins

plugins {
    id 'com.android.application' version '8.0.1' apply false
    id 'com.android.library' version '8.0.1' apply false
    id 'org.jetbrains.kotlin.android' version '1.9.20' apply false
    id 'com.google.dagger.hilt.android' version '2.48.1' apply false
    id 'androidx.navigation.safeargs' version '2.5.3' apply false
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.20'

}

这里是插件块:build.gradle(app)

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
    id 'androidx.navigation.safeargs.kotlin'
    id 'com.google.dagger.hilt.android'
    id 'org.jetbrains.kotlin.plugin.serialization'
}

在那里,我实现了以下库:

implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0"

问题是,用这样的方式注释以下类:@Serializable

@Serializable
data class User(
    val name: String = "",
    val surname: String = "",
    val phone: String = "",
    val email: String = "",
)

Android Studio 给我留下了这个警告:

Kotlinx.serialization 编译器插件未应用于模块, 因此,不会处理此注释。

我浏览了 StackOverflow 并注意到其中的代码是正确的,所以我真的不知道如何修复此警告。build.gradle

Android Kotlin 序列化

评论

0赞 Marko Topolnik 11/11/2023
除了检查警告之外,您的代码是否有效?你能序列化/反序列化吗?User
0赞 Antonio 11/11/2023
不,我的代码不起作用,因为我需要函数“serializer()”
0赞 Marko Topolnik 11/11/2023
我有同样的警告,但反序列化对我来说效果很好。此警告可能会分散注意力,并且您的问题出在其他地方。
0赞 Antonio 11/11/2023
我附加 Serializable 注解的对象不会生成名为 serializer() 的方法,正是因为注解具有该警告。因此,注解不会生成必要的代码
1赞 Marko Topolnik 11/12/2023
当我删除 or 时,代码停止工作。所以这个插件肯定会被应用。 正如你所报告的那样,不见了,但我可以写,而且有效。此函数不是生成的,而是存在于 中。我认为这是一个合理的解决方法。或者您可以尝试降级插件,因为这似乎是一个错误。@Serializableid 'org.jetbrains.kotlin.plugin.serialization'MySerializable.serializer()val serializer = serializer<MySerializable>()Serializers.kt

答:

0赞 IODevBlue 11/10/2023 #1

在项目级别 build.gradle 中尝试此操作

plugins {
     id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.20' apply false
}

这可能就是问题所在。

评论

0赞 Antonio 11/10/2023
不幸的是,这并不能解决警告
0赞 ΓDΛ 11/10/2023 #2

我看到你忘了把它添加到.build.gradle(app)

plugins {
    ...    
    id 'kotlinx-serialization'
    ...
}

评论

0赞 Marko Topolnik 11/11/2023
这个建议似乎与文档相矛盾。你能添加一个提到这个插件ID的官方文档链接吗?
0赞 Antonio 11/11/2023
事实上,文档谈到了这个插件 id 'org.jetbrains.kotlin.plugin.serialization',但我也尝试了推荐的那个,但它没有解决
0赞 ΓDΛ 11/11/2023
感谢您的光临。我在自己的项目中使用它,此外,我还查看了给出的其他答案。stackoverflow.com/a/54780989/5595926
0赞 Marko Topolnik 11/11/2023
在插件的早期版本中似乎是这样(年份是 2019 年)。
0赞 Antonio 11/11/2023
即使提到的答案也不能解决问题(此外,我在提出问题之前已经咨询过的答案。
1赞 Marko Topolnik 11/12/2023 #3

这个版本的序列化插件似乎有一个错误。即使插件被应用并且序列化程序被注册,该功能也丢失了。解决方法是使用函数 。MySerializable.serializer()kotlinx.serialization.serializer<MySerializable>()