问题标签 [kotlinx.serialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4391 浏览

android - 使用 Retrofit 处理 Kotlin 序列化 MissingFieldException

我将kotlinx.serialization与 retrofit 结合使用。我收到的 json 响应将根据它包含的属性而有所不同。在大多数情况下,我的应用程序中的数据模型包含的字段比我在响应中收到的要多。我无法控制它,所以我需要在代码中处理它。

MissingFieldException在这种情况下,Kotlinx.serialization 会抛出 a 。我知道在使用时Json.parse您可以将其包装在 try-catch 块中并忽略此类错误。但由于我使用的是改造,我看不到使用这种方法的方法:

网络服务.kt

MainActivity.kt

json 响应(在这个组成的示例中)故意省略了“缺失”字段:

由于该 json 不包含missing数据类中的字段,因此应用程序崩溃并抛出MissingFieldException. 我想知道如何在改造案例中避免这个问题。

谢谢你的帮助。

0 投票
1 回答
2829 浏览

kotlin - 具有多态 kotlinx 序列化的自定义序列化程序

使用 kotlinx.serialization 多态性,我想得到

但我明白了

我使用以下型号

我应用以下Json

我使用序列化器 TruckKSerializer 因为服务器采用扁平结构。同时,在应用程序中我想使用一个对象 Truck.Body。对于扁平化,我根据这些类中的文档使用 JsonOutput 和 JsonInput覆盖fun serialize(encoder: Encoder, obj : T)和在 Serializator 中。fun deserialize(decoder: Decoder): T

最后,我使用stringify(serializer: SerializationStrategy<T>, obj: T)

我最终得到{"type":"kotlin.collections.LinkedHashMap", ...},但我需要{"type":"veh_t", ...} 如何获得正确的类型?我想使用多态性Vehicle并使用 Truck.Body.serializer() 对 Body 对象进行编码以展平。

通过这种序列化,PassengerCar 类运行良好。

结果正确:

我认为问题在于自定义序列化程序TruckKSerializer。我注意到如果我在覆盖的fun serialize(encoder: Encoder, obj : T)下一个代码中使用

我得到了正确的类型,但无法使用它的序列化程序展平对象 Truck.Body。

0 投票
1 回答
3222 浏览

kotlin - 复杂层次结构的多态 kotlinx 序列化

使用多态序列化,我想序列化类 A、B1、B2。我想获得 B2 类的以下行

我使用层次结构

并像这样进行序列化

结果,我得到kotlinx.serialization.SerializationException: class B2 (Kotlin reflection is not available) is not registered for polymorphic serialization in the scope of interface BaseClass (Kotlin reflection is not available)

如何正确序列化给定的结构?B1、B2 类必须使用类型“type_2”进行序列化。

0 投票
1 回答
764 浏览

android - ReamList 和 List 的 Kotlin 序列化序列化程序

我只是尝试使用 Kotlin 序列化库来替换 Gson,但是在我的模型中将它用于 RealmList 时遇到问题。任何帮助将不胜感激。我收到错误 kotlinx.serialization.SerializationException: Can't locate argument-less serializer for class io.realm.RealmList

我有这样的数据类

我的社交数据类是

这是我的改造建造者

我正在使用专门用于 Kotlin 序列化的改造适配器和我的改造电话

0 投票
1 回答
2028 浏览

arrays - kotlin 中带有 ByteArray 的数据类

我在 Kotlin 中创建了一个 Data 类,其中包含一个 ByteArray 形式的图像。构建时出现以下错误:

错误中的主要信息似乎是primitive arrays are not supported yet. 如果删除ByteArray数据类,则编译正确。

有没有办法用 ByteArray 创建数据类?或者有没有办法将 a 转换ByteArrayArray<Byte>

谢谢你的帮助

0 投票
1 回答
564 浏览

kotlin - 如何在 Kotlin 多平台项目中使用 @SerializedName?

我正在使用 Kotlin 多平台。我在 Json 响应中获取对象名称。我想用其他名称映射对象名称。所以我发现使用@SerializedName。但它不起作用。

它说未解决的参考:SerializedName。

0 投票
1 回答
1021 浏览

kotlin - 如何使用 kotlinx 序列化 json 的动态键

我有一个带有这种键的json:

对象中的所有键metaData都是动态的(不是真的,但有数百个不同的键)我如何序列化这个对象而不必创建一个包含所有可能键的类。

这是我的工作:

0 投票
0 回答
826 浏览

android - Ktor:有效 JSON 上的 JsonDecodingException

在此代码之后引发以下异常。有趣的是,它在调试和单步执行代码时起作用。在最后一行抛出异常。

科特林 1.3.60

克托尔 1.2.6

kotlinx.serialization 0.14.0

当不使用调试器单步执行时,日志状态text为空。怎么会这样?这是在传输所有内容之前运行吗?

0 投票
0 回答
312 浏览

android - Kotlinx.serialization 不适用于 androidTest

在我的项目中设置 Ktor 并正常工作。运行 androidTest (“仪器测试”)时,我得到一个NoSuchMethodError在测试中运行的 Json.nonstrict.parse() 代码。这是测试 apk 中的代码,而不是应用程序中的代码。

Kotlinx.serialization 依赖项在模块中声明,我已经尝试过implementationandroidImplementation.

0 投票
0 回答
103 浏览

kotlin - 常见 Java 类是否有默认的序列化器实现?

我正在尝试kotlinx.serializaion,发现缺乏对常见类型的默认支持有点令人反感。举个例子java.util.UUID;即使应用@ContextualSerialization,我得到一个错误,编译器无法找到这种类型的无参数序列化程序。假设推荐的解决方案是为 UUID 实现自定义序列化程序,我是否正确?是否没有办法(或计划)为常见类型提供默认序列化程序作为生活质量功能?