标签: kotlinx.serialization

使用 kotlinx 序列化序列化选项列表

如何使用 kotlinx 序列化对可选字符串列表进行字符串化?我想执行类似于:

val json = Json(JsonConfiguration.Stable)
val data: List<String?> = listOf("v1", null, "v3")
val dataJson = json.stringify(String.serializer().list, data)
Run Code Online (Sandbox Code Playgroud)

但是,这不会编译。我知道这String.serializer().list提供了一个SerializationStrategy<List<String>>我需要的地方SerializationStrategy<List<String?>>。我怎样才能获得后者?

json kotlin kotlinx.serialization

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

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
查看次数

如何使用 kotlinx.serialization 部分解码 JSON 字符串?

我有一个 JSON 字符串,看起来像{"code": "FOO"}.

现在我想使用kotlinx.serialization. 我尝试了以下方法:

import kotlinx.serialization.*

@Serializable
data class Result(val code: String?)

val decoded = Json.decodeFromString<Result>(jsonString)
Run Code Online (Sandbox Code Playgroud)

这在 JSON 仅包含 时有效code,但实际上 JSON 字符串中可以有其他键(这是我无法控制的)。我只关心code密钥,但是当存在其他密钥时,我的应用程序崩溃了。

我如何只解码相关的 JSON 密钥?

serialization json kotlin kotlinx.serialization

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

在多平台项目中使用 kotlinx 序列化

我正在按照 github 上的教程在 Kotlin 1.4-M2 的多平台项目中使用 Kotlin seriazliation 进行测试驱动,但我没有得到要编译的序列化位。

这是我的 build.gradle.kts

plugins {
    val kotlinVersion = "1.4-M2"
    kotlin("multiplatform") version kotlinVersion
    kotlin("plugin.serialization") version kotlinVersion
}
Run Code Online (Sandbox Code Playgroud)
repositories {
    mavenCentral()
    maven {
        url = uri("https://dl.bintray.com/kotlin/kotlin-eap")
    }
    maven {
        url = uri("https://kotlin.bintray.com/kotlinx")
    }
    jcenter()
    gradlePluginPortal()
}
Run Code Online (Sandbox Code Playgroud)
kotlin {
    jvm {
        compilations.all {
            kotlinOptions.jvmTarget = "11"
        }
    }
    js(IR) {
        moduleName = "hotel"
        browser {
            dceTask {
                keep(
                   ...
                )
            }
            binaries.executable()
        }
    }

    sourceSets {

        // val serializationVersion = "0.20.0-1.4-M2"
        val serializationVersion = "0.20.0" …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-multiplatform kotlinx.serialization kotlin-gradle-plugin

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

如何通过 jvm 插件使用 Kotlinx 序列化

我无法通过 Kotlin JVM 插件使用 Kotlinx 序列化

在Groovy DSL 的说明中:

plugins {
    id 'org.jetbrains.kotlin.multiplatform' version '1.5.0'
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.5.0'
}
Run Code Online (Sandbox Code Playgroud)

因为我已经使用了org.jetbrains.kotlin.jvm,所以我想将它与 JVM 插件一起使用,但说明没有明确显示如何使用。

在 中build.gradle,我尝试使用:

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.5.0'
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.5.0'
    ...
}
Run Code Online (Sandbox Code Playgroud)

在代码中:

import kotlinx.serialization.*
Run Code Online (Sandbox Code Playgroud)

而且,我收到编译错误 ( Unresolved reference: serialization)。如何通过 JVM 插件使用 kotlinx 序列化?另外,我需要在 Groovy DSL 语法中使用它。说明已经显示了它适用于 Kotlin DSL,但我没有使用它。有人可以帮忙吗?

groovy gradle kotlin kotlinx.serialization

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

解析Kotlin中的字段,可以是字符串,也可以是对象

我在从后端接收数据时遇到一个问题,结果字段(例如“somethingField”)可能是 String 或具有两个 Int 列表的对象。如何正确解析这些数据?我正在使用 kotlinx.serialization 。

@Serializable
data class SomeObject(
    ...
    val somethingField: String or SometingObject
    ...
)

@Serializable
data class SomethingObject(
    val list1: List<Int>,
    val list2: List<Int>,
)
Run Code Online (Sandbox Code Playgroud)

kotlin kotlinx.serialization

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

Kotlin 类应该是什么来表示带有类数组的 json

给定以下 JSON:

{
"from": 1,
"to": 3,
"results": [
    {
        "item": {
            "status": "SUCCESS",
            "statusMessage": "",
            "requestId": "1"
        }
    },
    {
        "item": {
            "status": "SUCCESS",
            "statusMessage": "",
            "requestId": "2"
        }
    },
    {
        "item": {
            "status": "SUCCESS",
            "statusMessage": "",
            "requestId": "3"
        }
    },
    {
        "item": {
            "status": "SUCCESS",
            "statusMessage": "",
            "requestId": "4"
        }
    }
]}
Run Code Online (Sandbox Code Playgroud)

为了使用反序列化,应该定义什么正确的 Kotlin 类kotlinx.serialization.json.Json

我努力了:

data class Response (
  val from: Long,
  val to: Long,
  val results: List<Result>
)

data class Result (
  val item: …
Run Code Online (Sandbox Code Playgroud)

kotlin json-deserialization kotlinx.serialization

0
推荐指数
1
解决办法
441
查看次数