首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在生成版本中找不到数据类Kotlin的序列化程序

在生成版本中找不到数据类Kotlin的序列化程序
EN

Stack Overflow用户
提问于 2020-12-25 04:38:24
回答 4查看 1.9K关注 0票数 3

我想将我的json字符串响应从API转换为object:

代码语言:javascript
运行
复制
val obj = Json.decodeFromString<MyModel>(jsonResponseString)

我的数据类:

代码语言:javascript
运行
复制
@Serializable
data class MyModel(
    @SerializedName("field") val field: String
)

它看起来非常简单,并且在调试模式下工作!

但当编译了AppBundle,在发布模式下构建,并从Play Store内部测试下载应用程序时,我得到了以下错误:

代码语言:javascript
运行
复制
Serializer for class '...' is not found. Mark the class as @serializable or provide the 
serializer explicitly.
kotlinx.serialization.internal.Platform_commonKt.serializerNotRegistered
EN

回答 4

Stack Overflow用户

发布于 2021-02-06 22:13:04

如果您使用的是minifyEnabled true,则应将此代码添加到proguard.pro中

代码语言:javascript
运行
复制
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.AnnotationsKt # core serialization annotations

# kotlinx-serialization-json specific. Add this if you have java.lang.NoClassDefFoundError kotlinx.serialization.json.JsonObjectSerializer
-keepclassmembers class kotlinx.serialization.json.** {
    *** Companion;
}
-keepclasseswithmembers class kotlinx.serialization.json.** {
    kotlinx.serialization.KSerializer serializer(...);
}

# Change here com.yourcompany.yourpackage
-keep,includedescriptorclasses class com.yourcompany.yourpackage.**$$serializer { *; } # <-- change package name to your app's
-keepclassmembers class com.yourcompany.yourpackage.** { # <-- change package name to your app's
    *** Companion;
}
-keepclasseswithmembers class com.yourcompany.yourpackage.** { # <-- change package name to your app's
    kotlinx.serialization.KSerializer serializer(...);
}

请确保将占位符包名称替换为应用程序包名称

Source

票数 4
EN

Stack Overflow用户

发布于 2020-12-25 04:38:24

我找到了下一个解决方案:

第一步,我添加了@Keep anotation。Keep anotation表示,当代码在构建时缩小时,不应删除带注释的元素:

代码语言:javascript
运行
复制
@Keep
@Serializable
data class MyModel(
    @SerializedName("field") val field: String
)

第二步,我将我的json转换为对象,对序列化程序进行静态引用:

代码语言:javascript
运行
复制
val objError = Json {ignoreUnknownKeys = true}.decodeFromString(MyModel.serializer(), jsonResponseString)

别忘了导入并实现最新版本的:

代码语言:javascript
运行
复制
'org.jetbrains.kotlin.plugin.serialization'

它成功了,它拯救了我的一天!

票数 3
EN

Stack Overflow用户

发布于 2021-08-29 04:08:15

我已经修复了Gradle文件中的这些更改,在构建项目gradle中,将以下行添加到依赖项中:

代码语言:javascript
运行
复制
classpath "org.jetbrains.kotlin:kotlin-serialization:1.5.21"

还要将这些添加到构建应用gradle中:

代码语言:javascript
运行
复制
plugins {
    ...
    id 'kotlinx-serialization'
}
dependencies {
    ...
    implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2'
}

请注意,版本号可能不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65443052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档