Bre*_*ett 6 serialization android kotlin
我在编译也是通用的序列化数据类时遇到问题。我对 Android 和 Kotlin 非常陌生,但我是一位经验丰富的 iOS/Swift 开发人员(不要因此而反对我)。
我正在尝试围绕 GraphQL 响应设置一个通用数据类包装器,它可以返回数据字段中的 T 泛型,或错误字段中的错误。
import kotlinx.serialization.Serializable
@Serializable
data class GraphQLResponse<T:Serializable> (
val errors : List<ErrorResponse>? = null,
val data : Map<String, T>? = null
) {
@Serializable
data class Location(
val line: Int? = 0,
val column: Int? = 0,
val sourceName: String? = null
)
@Serializable
data class ErrorResponse(
val locations: List<Location>? = null,
val errorType: String? = null,
val message: String? = null
)
}
Run Code Online (Sandbox Code Playgroud)
编译这个我得到以下错误:
java.lang.AssertionError: Couldn't load KotlinClass from /Users/brett/Development/Company/android/app/build/tmp/kotlin-classes/debug/com/company/company/network/GraphQLResponse.class; it may happen because class doesn't have valid Kotlin annotations
Run Code Online (Sandbox Code Playgroud)
还有一系列关于反射的警告。
我想要通过泛型和序列化来实现的事情是可能的吗?我需要编写自己的反序列化方法吗?
任何帮助和建议将不胜感激。
小智 1
您需要为类型 T 提供自定义序列化器。检查本指南
(顺便说一句,在您的代码中类型 T 不应该是可序列化的 - T:Serializable。这只是注释)
有一个类似的问题,你看看这个。但是,正如您所看到的,如果您在项目中使用 kapt,即使您提供了序列化器,它也可能无法正常工作。
我从序列化存储库中找到了这个评论:
然而,由于提到的 kapt 问题,目前这是不可能的。也许,一个可行的解决方法是将模型和序列化器移动到单独的 Gradle 模块,该模块不由 kapt 处理。
关于这个问题还有更多问题:
| 归档时间: |
|
| 查看次数: |
1554 次 |
| 最近记录: |