如何使用 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?>>。我怎样才能获得后者?
我们正在使用 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
我有一个 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 密钥?
我正在按照 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
我无法通过 Kotlin JVM 插件使用 Kotlinx 序列化
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,但我没有使用它。有人可以帮忙吗?
我在从后端接收数据时遇到一个问题,结果字段(例如“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) 给定以下 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)