问题标签 [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 投票
1 回答
715 浏览

kotlin - Ktor 与 Kmongo 和 kotlinx.serialization

我有一个设置,我将 KTor 与 KMongo 和 Kotlinx.Serialization 一起使用。

Kmongo 部分有效,我可以获取并放置我的类

进入数据库并检索它。这一切都完美无缺。

但是,当我尝试通过休息调用将该对象发送到前端时,再次使用 Kotlinx.Serialization。

它抛出了这个期望:

现在我发现这是因为 kotlin.serialization json 有 2 个实例。并且 KMongo 上的一个不与另一个共享它的序列化程序。

所以我将 KMongo 的序列化程序添加到 Ktor 的另一个实例中

现在我得到了

所以我的问题是它为什么会发生以及如何解决它?

0 投票
1 回答
3218 浏览

kotlin - 如何使用 kotlinx 序列化使用 open val 序列化 kotlin 密封类

我的代码中有这种密封类,编译器说我: Serializable class has duplicate serial name of property 'id', either in the class itself or its supertypes.

有没有办法在可序列化的密封类中打开 val,在覆盖它时可以正常工作?

0 投票
0 回答
89 浏览

kotlin - 如何使用 kotlinx.serialization 在 CBOR 对象和 ByteString 上添加 TAG

如何使用 kotlinx.serialization 在 CBOR 对象和 ByteString 上添加 TAG

例子 :- 24(h'A367646F635479706564646F63326A6E616D65537061636573A2666E616D653231A2626262F4626363F4666E616D653232A2627878F4627979F46B72657175657374496E666FAA644B6579306656616C756530644B6579316656616C756531644B6579326656616C756532644B6579336656616C756533644B6579346656616C756534644B6579356656616C756535644B6579366656616C756536644B6579376656616C756537644B6579386656616C756538644B6579396656616C756539')

在这个例子中,我用 24 标记了 byteString。

有没有办法在 kotlin 多平台中使用 kotlinx.serialization 库

0 投票
2 回答
2113 浏览

android - NoClassDefFoundError kotlinx serialization

I have a kotlin multiplatform project and I need to serialize a class. I have included the following dependency in my commonMain and androidMain and iosMain respectively in my multiplatform gradle file:

This is the class I want to serialize:

And in another class (TrialClass), this is how I am testing it:

But when I run it, I get the following error:

I get no issues when having the imports in my class, but when running I get the above mentioned error.

Any help or advice will be highly appreciated.

0 投票
1 回答
2946 浏览

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

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

现在我想使用反序列化这个字符串kotlinx.serialization。我尝试了以下方法:

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

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

0 投票
1 回答
1007 浏览

kotlin - 按 kotlinx.serialization 生成的键排序的映射

我需要用映射序列化一个类,以便映射中的键在 json 中排序。所以如果有一堂课

它被序列化了

那么生成的json应该是

我尝试使用SortedMap而不是Map,但这会引发异常:

kotlinx.serialization.SerializationException:类“TreeMap”未在“SortedMap”范围内注册多态序列化

我怎样才能得到一个排序的 json 使用kotlinx.serialization

(kotlin 1.4.0,kotlinx.serialization 1.0.0-RC)

0 投票
3 回答
2806 浏览

kotlin - Kotlin - 无法序列化多态类。未找到序列化程序

我正在尝试使用kotlinx.serializationkotlin/native 序列化多态类。我正在使用序列化指南中提供的示例:

此代码在使用 JVM 运行时有效,但在使用 kotlin native 编译和运行时linuxX64会引发错误:

我是否理解错误,代码应该在两个平台上都可以工作?如何使其在本机上工作?

0 投票
2 回答
2998 浏览

json - 使用 kotlinx.serialization 将 json 对象属性反序列化为字符串

给定json如下,其中payload对象的结构会有所不同:

...使用kotlinx.serialization我如何将其反序列化为以下数据类,其中的值payload应该是有效负载对象的原始 json 字符串。

0 投票
1 回答
1001 浏览

json - Kotlinx 序列化:如何绕过 reified typeargs 进行反序列化?

实际上,主要问题仍然是 Kotlin 中的类没有具体的类型参数。但这就是为什么在这种特定情况下这让我感到困扰:

假设您有一个包装类Wrapper,它接收一个字符串content和一个类* type,并且可以通过调用函数输出type通过解析content为 JSON检索到的类对象getObj()

我想使用 kotlinx.serialization。现在,您可能已经注意到我之前是如何在“class”后面加上星号的。原因如下:是的,Wrapper必须以某种方式学习目标课程,但如何?它应该只是类型参数(因为类型erausre而不起作用)还是KClass引用(因为我需要一个具体的类型参数而不起作用)?

问题是,据我所知,将通用 JSON 解码为可序列化目标类的唯一方法是使用Json.decodeFromString<T>(content),其中T是目标类型,content是 JSON 字符串。现在,T被定义为具体化(以便可以在运行时处理该类型)并且只能用另一个具体化的类型参数或实际的类引用来填充。我不能使用另一个具体化的类型参数,因为我在一个类的上下文中,一个类不能有具体化的类型参数。我也不能使用实际的类引用,因为类的用户应该能够用不同的目标来构造它,例如他们决定目标是什么,而不是我。

那么,如何使用 kotlinx.serialization 来做到这一点?甚至可能吗?

0 投票
1 回答
123 浏览

java - 有没有办法完全换掉 Apache Beam 处理序列化的方式?

我正在将 Kotlin 与 Apache Beam 一起使用,并且我有一组 DTO,它们相互引用,并且对于任何带有Kotlinx Serialization的编码器都非常适合序列化。当我尝试将它们与 Beam 一起使用时,我最终遇到了问题,因为它正在寻找所有对象、类型参数和嵌套对象来实现 JavaSerializable接口。问题是,我无法控制所有对象类型,因为有些来自 3rd-party 库。

我已经实现了我自己CustomCoder<T>的使用 Kotlinx 序列化的类型,但后来我遇到了我的自定义编码器无法序列化的问题,特别是由于 Kotlinx 序列化插件生成的伴侣对象序列化器没有序列化。由于它是编译时生成的代码,因此我无法控制它,也无法将其标记为@Transient. 我尝试Externalizable在编码器上实现,但只要我传递一个未实现的类型参数或T没有实现Serializable的嵌套类型参数,它就会失败。

此外,Kotlinx 序列化很好,因为它不使用反射。如果我能以某种方式换掉序列化机制,而不必完全依赖标准的 Java 序列化方法,或者以某种方式实现Externalizable,只需调用我自己的序列化机制并忽略类型参数。有什么解决办法吗?我不在乎它有多 hacky,即使解决方案涉及弄乱 Gradle 构建配置中的东西以覆盖某些东西。我只是不确定如何去做,所以任何指针都会有很大的帮助!

或者,如果我放弃 Kotlinx 序列化,是否有任何简单的解决方案可以使任意复杂的数据类型序列化仅适用于 Java,甚至使用反射,而无需大量定制的手动工作来处理编码和解码?我觉得也许我只是错过了一些明显的东西。这是我第一个使用 Apache Beam 的项目,但到目前为止谷歌几乎没有帮助。