标签: kotlinx

Kotlinx.Serialization 反序列化日期

我很难找到有关如何反序列化日期字段的文档。我该如何实现这一目标?我在 SO 上找到的大多数解决方案都不起作用,或者它们使用不再可用的类

@Serializable
data class Dashboard(
    val someNumber: Int,
    val someDate: Date? // Custom Deserialization from unix timestamp
)
Run Code Online (Sandbox Code Playgroud)

编辑:我发现使用的大多数解决方案PrimitiveSerialDescriptor似乎不可用

kotlin kotlinx.serialization kotlinx

8
推荐指数
2
解决办法
2万
查看次数

kotlinx 序列化:找不到缺少类鉴别器(“null”)的多态序列化器

我正在尝试序列化一个 json,但它抛出了 JsonDecodingException。检查代码:

SerializationTestCase.kt:

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import org.junit.Test

class SerializationTestCase {

    private val json = Json {
        ignoreUnknownKeys = true
        isLenient = true
        prettyPrint = true
        allowStructuredMapKeys = true
        encodeDefaults = true
        classDiscriminator = "#class"
        serializersModule = SerializersModule {
            polymorphic(Module::class) {
                subclass(TeamModule::class, TeamModule.serializer())
            }
        }
    }

    @Test
    fun test() {
        val inputJson = """
    [
        {
          "type": "team",
          "data": {
            "readOnly": true
          }
        }
    ]
""".trimIndent()

        val moduleList: List<Module> = …
Run Code Online (Sandbox Code Playgroud)

polymorphism android kotlin kotlinx.serialization kotlinx

7
推荐指数
1
解决办法
1036
查看次数

为什么在使用 kotlinx.android.parcel.Parcelize 时收到“未实现抽象成员”警告?

我在尝试从发送 NewVehicle 对象的另一个片段读取包时收到此错误。

错误:类“NewVehicle”不是抽象的,并且未实现抽象成员 public Abstract fun describeContents(): Int 在 android.os.Parcelable 中定义

新车.kt

import android.os.Parcelable
import com.google.gson.annotations.SerializedName
import kotlinx.android.parcel.Parcelize

@Parcelize
data class NewVehicle(
    @SerializedName("av_se")
    val avSe: String,
    .....
    @SerializedName("vh_ob")
    val vhOb: String,
    @SerializedName("zo_in")
    val zoIn: String
):Parcelable{}
Run Code Online (Sandbox Code Playgroud)

android parcel parcelable kotlin kotlinx

5
推荐指数
3
解决办法
6392
查看次数

当类型为整数而不是字符串时的多态 kotlinx 序列化

我正在尝试使用和发出包含多态项目列表的 JSON。问题是:这些项目包含type带有整数值(而不是字符串)的键。 API 端点生成并期望与此类似的 JSON:

{
  "startTime": "2022-07-27T13:32:57.379Z",
  "items": [
    {
      "type": 0,
      "results": "string",
      "restBetweenRounds": "string"
    },
    {
      "type": 1,
      "results": "string",
      "setCount": 0
    },
    {
      "type": 2,
      "items": [
        {
          "type": 0,
          "results": "string",
          "restBetweenRounds": "string"
        },
        {
          "type": 1,
          "results": "string",
          "setCount": 0
        }
      ],
      "results": "string"
    }
  ],
  "status": 0,
  "clientId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
Run Code Online (Sandbox Code Playgroud)

正如有关多态性的文章中所述,我创建了类的层次结构。我还尝试type在反序列化之前转换值。

object MyTransformingDeserializer : JsonTransformingSerializer<BaseItem>(PolymorphicSerializer(BaseItem::class)) {
    override fun transformDeserialize(element: JsonElement): JsonElement {
        val type = element.jsonObject["type"]!!
        val …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlinx.serialization kotlinx

5
推荐指数
1
解决办法
3076
查看次数

调用生成的 serializer() 方法时收到 NoClassDefFoundError

NoClassDefFoundError在尝试调用类Foo.serializer()上的方法时得到了一个@Serializable

这是我的测试用例:

@Serializable
data class Foo(val data: String)

val jsonString = json.stringify(
  Foo.serializer(), // <= Error happens here
  Foo(data = "foo")
)
Run Code Online (Sandbox Code Playgroud)

尝试运行代码会导致以下堆栈跟踪:

java.lang.NoSuchMethodError: 'void kotlinx.serialization.internal.SerialClassDescImpl.<init>(java.lang.String, kotlinx.serialization.internal.GeneratedSerializer, int)'
    at com.example.Foo$$serializer.<clinit>(Foo.kt:7)
    at com.example.Foo$Companion.serializer(Foo.kt)
Run Code Online (Sandbox Code Playgroud)

kotlin kotlinx.serialization kotlinx

3
推荐指数
1
解决办法
839
查看次数

import kotlinx.android.synthetic 失败:Android studio 找不到它,但我可以运行该应用程序

我发现了很多关于这个主题的东西,但还不足以解决它,所以我就开始吧。

我刚刚开始一个新项目,他们遇到了一个严重的问题:

import kotlinx.android.synthetic
Run Code Online (Sandbox Code Playgroud)

Android Studio 无法解决。项目运行起来,构建过程中没有问题,但是 Android Studio 在代码中向我显示了很多错误,因为它无法识别布局。这意味着布局/组件没有快捷方式。

我认为我们已经导入了正确的插件:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'org.jetbrains.kotlin.android.extensions'
Run Code Online (Sandbox Code Playgroud)

我尝试删除 apply plugin: 'org.jetbrains.kotlin.android.extensions',但没有帮助。我们的构建脚本依赖项中还有类路径“org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version”。

不是 Gradle 专家,但欢迎寻求任何帮助!

android gradle synthetic kotlin kotlinx

3
推荐指数
1
解决办法
3536
查看次数

IntellijIdea 中未解决的参考 Kotlinx。即使在添加库之后

我只是想尝尝 Kotlin 协程。不幸的是,我无法kotlinxIntelliJ. 我已经通过Maven.

  1. 尝试使缓存无效。
  2. 重建项目。
  3. 尝试在新项目中使用它。
  4. Even在自动完成中IntelliJ建议kotlinx
  5. 仍然说未解决的参考

我已经尝试了网络上的大多数解决方案。但没有任何效果。

以下是我正在执行的步骤。

做了一个新项目

做了一个新项目。

在此处输入图片说明

kotlinx 由于尚未添加库,因此带有下划线。

在此处输入图片说明

project structure > modules > dependencies > add > library > maven搜索kotlinx库中。

在此处输入图片说明

下载了库。

在此处输入图片说明

应用设置。

在此处输入图片说明

kotlinx库现在在该External Libraries部分中可见。

在此处输入图片说明

甚至自动完成现在也提示kotlinx.

在此处输入图片说明

尽管如此,什么都没有改变。结果是一样的。

intellij-idea kotlin kotlinx

3
推荐指数
1
解决办法
160
查看次数

kotlinx 序列化 — 进行多态子反序列化的最佳方法

我有一个 Json 输入,例如:

\n
{\n   "type": "type_1",\n   "data": {\n      // ...\n   }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

data字段可能会有所不同,具体取决于type

\n

所以,我需要一个反序列化器,它分别查看type(enum) 和反序列化data(例如,对于type_1值它是Type1类,对于type_2\xe2\x80\x94Type2等)。

\n

我考虑过一个完全自定义的反序列化器(扩展 a KSerializer<T>),但它看起来有点矫枉过正。

\n

进行此类反序列化的最佳(kotlin)方法是什么?

\n

json kotlin kotlinx.serialization kotlinx

3
推荐指数
1
解决办法
1194
查看次数

android kotlin 多平台 kotlinx.serialization 适用于调试,但不适用于发布版本

我们正在使用 kotlin multiplatform 进行公司的下一个项目。一切正常,直到我尝试为 android 创建一个发布版本以进行 beta 测试。我在发布版本中遇到此错误,而在调试中一切正常。

[NetworkManager] unknown exception: l.a.w: Can't locate argument-less serializer for class a. For generic classes, such as lists, please provide serializer explicitly.
Run Code Online (Sandbox Code Playgroud)

这是项目级 build.gradle

buildscript {
ext.kotlin_version = '1.3.70'
ext.versions = [
        "ktor" : "1.3.2",
        "serialization" : "0.20.0",
        "coroutines" : "1.3.6",
]

repositories {
    maven { url 'https://maven.google.com' }
    maven { url 'https://dl.google.com/dl/android/maven2' }
    maven { url "https://s3-eu-west-1.amazonaws.com/elasticode-sdk/Android/maven/" }
    google()
    jcenter()

}
dependencies {
    classpath 'com.android.tools.build:gradle:3.6.3'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.2.0'
    classpath …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-multiplatform kotlinx.serialization kotlinx

2
推荐指数
1
解决办法
1491
查看次数