问题标签 [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 回答
627 浏览

json - 用 Javalin 框架中的 kotlinx.serialization 替换 Jackson

我正在尝试用 Kotlinx.serialization 替换默认的Javalin JSON 序列化程序 Jackson。

该文档显示了如何使用 GSON 序列化程序来完成。
不幸的是,kotlinx 序列化程序具有不同的函数签名,我无法弄清楚如何传递参数。

序列化是可以的,但使用 decodeFromString 函数的反序列化需要传递映射函数给定的类型为targetClass.

我被困在这里:

但我得到:Cannot use 'T' as reified type parameter. Use a class instead.

我也试过:

但我收到一个警告:Override by an inline function和一个错误:Override by a function with reified type parameter

我是新手kotlin,我正在努力理解这个覆盖有什么问题。

0 投票
2 回答
802 浏览

kotlin - 为什么 ktor 序列化不支持序列化不同元素类型的集合?

我正在尝试制作一个简单的服务器,它以 JSON 格式提供序列化列表。待序列化的List是方博文多态序列化部分的示例。

但是使用 ktor 的序列化功能,我得到以下异常。

由于密封类是选择 Kotlin 的一个关键特性,我真的想知道为什么不支持它。

ktor-serialization 是否有充分的理由不支持这一点?或者我应该发布从SerializerLookup.kt中删除此检查的问题?


我通过在 IntelliJ 中选择 New Project > Kotlin > Application 来编写此代码。修改后的代码如下所示。

我的服务器.kt:

我的 build.gradle.kts:

0 投票
1 回答
903 浏览

kotlin - kotlinx.serialization.properties 的解码和编码字符串

我目前正在为实验性的 KXS-properties 序列化后端苦苦挣扎,主要是因为两个原因:

  1. 我找不到任何文档(我认为没有)
  2. KXS-properties 仅包括一个串行器/解串器,但没有编码器/解码器

框架提供的端点本质上是Map<String, Any>,但映射是平面的,并且键已经具有通常的点分隔属性语法。因此,我必须采取的步骤是将地图编码为可打印到.properties文件的单个字符串,并将文件中的单个字符串解码.properties到地图中。我通常遵循来自https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html#load(java.io.Reader)的属性格式规范,它并不像有人可能会想。

问题是我不能java.util.Properties立即使用,因为 KXS 是多平台的,当我将它限制为 JVM 时,它会有点扼杀它的目的,因为我使用java.util.Properties. 如果我要使用它,解决方案将非常简单,如下所示:https ://gist.github.com/RaphaelTarita/748e02c06574b20c25ab96c87235096d

所以我正在尝试实现我自己的编码器/解码器,遵循kotlinx.serialization.json.Json.kt. 虽然这很乏味,但到目前为止进展顺利,但现在我偶然发现了一个新问题:

据我所知(我不确定,因为没有文档),地图只包含原语(或原语等价物,因为 Kotlin 并没有真正的原语)。KSerializer我怀疑这是因为当您为 KXS 前端编写自己的s 时,您可以通过调用接口的encodeXXX()函数来指定编码为任何原语Encoder。现在的问题是:当我尝试解码到应该包含原语的地图时,我什至怎么知道模型类需要哪些原语?

我曾经用 Java 编写了自己的序列化器/反序列化器来了解这个主题,但在那个实现中,后端与前端的耦合更加紧密,因此我可以从模型类中查询预期的原始类型后端。但在我的情况下,我无权访问模型类,也不知道如何检索预期的类型。

如您所见,我尝试了多种方法,但都没有立即奏效。如果你能帮助我让这些工作中的任何一个工作,那将非常感激

谢谢!

0 投票
2 回答
902 浏览

json - Kotlin:将嵌套的 JSON 对象转换为文字字符串

我有一个数据类,它有一个类型是另一个数据类的属性,如下所示:

序列化后,它会产生如下输出:

但是,我想garage成为其 JSON 表示的文字字符串,而不是实际的 JSON 对象。换句话说,期望的输出是:

我怎样才能在 Kotlin 中做到这一点?可以只用kotlinx.serializationJackson/Gson 完成还是绝对必要?

请注意,此输出用于特定用途。我无法覆盖基本序列化程序,因为我仍然需要从普通 JSON 序列化/反序列化(第一个示例)。换句话说,最好的方案是将第一个 JSON 样本转换为第二个样本,而不一定让数据类直接生成第二个样本。

谢谢!

0 投票
3 回答
1575 浏览

kotlin - 如何使用 kontlinx.serialization 序列化泛型类?

我按照教程为我的泛型类创建了自定义序列化。但我仍然有错误:

SerializationException:找不到类“ApiResponse”的序列化程序。将类标记为 @Serializable 或显式提供序列化程序。

我的 ApiResponse 类如下所示:

上面注释中使用的 ApiResponseSerializer 是:

然后,当我尝试序列化我的数据对象时,我收到了上面提到的异常。

有人能告诉我哪里错了吗?谢谢你。

0 投票
1 回答
2299 浏览

json - 使用 kotlinx.serialization 库反序列化具有不同值类型的 JSON 数组

我正在尝试反序列化以下字符串:

反序列化适用于以下代码

但我想做类似的事情

kotlinx.serialization预期会失败JsonDecodingException: Unexpected JSON token at offset 15: Expected '{, kind: CLASS' 而且我不知道如何重写我的Decomposed反序列化工作。你能帮帮我吗?

0 投票
1 回答
384 浏览

android - Kotlinx Serialization @Body converter error while using HashMap with Any type

I am using Kotlinx Serialization with Retrofit and try to send params at Body via HashMap like below

But it gives this error message

I also add SerializersModule to Retrofit but it did not help

Anyone can help?

0 投票
0 回答
411 浏览

kotlin - 在 kotlinx.serialization 中获取类的序列化程序

假设这C是一个可序列化的类:

我至少有四种方法可以获取此类的序列化程序。

  1. 伴侣(?)功能。实际上 IDEA 并没有让我去声明,所以我假设它是一种合成的编译器插件生成的函数。
  1. serializer()使用具体类型参数调用:
  1. KClass 实验扩展:
  1. serializer()半实验超载:

最后两种方法似乎更强大:例如,我可以将它用于多态序列化,获取抽象类型实例的实际 KClass 并选择正确的序列化器。

我有几个问题:

  1. 实际存在哪些按类型获取序列化程序的方法,哪些方法是可取的?
  2. 据我了解,我可以为一个类注册多个序列化程序,那么在每种情况下我会得到哪一个呢?
  3. 假设我已经使用 为一个类注册了一个自定义序列化程序@Serializable(with=...),是否有可能以某种方式为其获取标准序列化程序?
0 投票
2 回答
5590 浏览

ktor - Kotlinx 序列化 MissingFieldException

我正在使用 Ktor 将 Moshi 序列化转换为 kotlinx 序列化,当我尝试请求获取数据时出现此错误

kotlinx.serialization.MissingFieldException:字段“附件”是必需的,但缺少

这是有道理的,因为这个特定的响应不包含这个字段

响应 JSON

但是我的序列化类的attachments字段可以为空(它仅在需要时才在响应中)所以它应该忽略它我认为就像它对 Moshi 所做的那样

在我的 Ktor 客户端设置中,我将其设置为忽略未知键

为什么即使它可以为空,它仍然说该字段是必需的?

0 投票
1 回答
1566 浏览

kotlin - 如何使用 kotlinx.serialization 序列化通用密封类

不确定是否有可能,但对于我的一生,我无法弄清楚如何序列化它。

T 中的所有内容都使用@Serializable ex: