问题标签 [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.
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
,我正在努力理解这个覆盖有什么问题。
kotlin - 为什么 ktor 序列化不支持序列化不同元素类型的集合?
我正在尝试制作一个简单的服务器,它以 JSON 格式提供序列化列表。待序列化的List是官方博文多态序列化部分的示例。
但是使用 ktor 的序列化功能,我得到以下异常。
由于密封类是选择 Kotlin 的一个关键特性,我真的想知道为什么不支持它。
ktor-serialization 是否有充分的理由不支持这一点?或者我应该发布从SerializerLookup.kt中删除此检查的问题?
我通过在 IntelliJ 中选择 New Project > Kotlin > Application 来编写此代码。修改后的代码如下所示。
我的服务器.kt:
我的 build.gradle.kts:
kotlin - kotlinx.serialization.properties 的解码和编码字符串
我目前正在为实验性的 KXS-properties 序列化后端苦苦挣扎,主要是因为两个原因:
- 我找不到任何文档(我认为没有)
- 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 编写了自己的序列化器/反序列化器来了解这个主题,但在那个实现中,后端与前端的耦合更加紧密,因此我可以从模型类中查询预期的原始类型后端。但在我的情况下,我无权访问模型类,也不知道如何检索预期的类型。
如您所见,我尝试了多种方法,但都没有立即奏效。如果你能帮助我让这些工作中的任何一个工作,那将非常感激
谢谢!
json - Kotlin:将嵌套的 JSON 对象转换为文字字符串
我有一个数据类,它有一个类型是另一个数据类的属性,如下所示:
序列化后,它会产生如下输出:
但是,我想garage
成为其 JSON 表示的文字字符串,而不是实际的 JSON 对象。换句话说,期望的输出是:
我怎样才能在 Kotlin 中做到这一点?可以只用kotlinx.serialization
Jackson/Gson 完成还是绝对必要?
请注意,此输出用于特定用途。我无法覆盖基本序列化程序,因为我仍然需要从普通 JSON 序列化/反序列化(第一个示例)。换句话说,最好的方案是将第一个 JSON 样本转换为第二个样本,而不一定让数据类直接生成第二个样本。
谢谢!
kotlin - 如何使用 kontlinx.serialization 序列化泛型类?
我按照教程为我的泛型类创建了自定义序列化。但我仍然有错误:
SerializationException:找不到类“ApiResponse”的序列化程序。将类标记为 @Serializable 或显式提供序列化程序。
我的 ApiResponse 类如下所示:
上面注释中使用的 ApiResponseSerializer 是:
然后,当我尝试序列化我的数据对象时,我收到了上面提到的异常。
有人能告诉我哪里错了吗?谢谢你。
json - 使用 kotlinx.serialization 库反序列化具有不同值类型的 JSON 数组
我正在尝试反序列化以下字符串:
反序列化适用于以下代码
但我想做类似的事情
但kotlinx.serialization
预期会失败JsonDecodingException: Unexpected JSON token at offset 15: Expected '{, kind: CLASS'
而且我不知道如何重写我的Decomposed
反序列化工作。你能帮帮我吗?
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?
kotlin - 在 kotlinx.serialization 中获取类的序列化程序
假设这C
是一个可序列化的类:
我至少有四种方法可以获取此类的序列化程序。
- 伴侣(?)功能。实际上 IDEA 并没有让我去声明,所以我假设它是一种合成的编译器插件生成的函数。
serializer()
使用具体类型参数调用:
- KClass 实验扩展:
serializer()
半实验超载:
最后两种方法似乎更强大:例如,我可以将它用于多态序列化,获取抽象类型实例的实际 KClass 并选择正确的序列化器。
我有几个问题:
- 实际存在哪些按类型获取序列化程序的方法,哪些方法是可取的?
- 据我了解,我可以为一个类注册多个序列化程序,那么在每种情况下我会得到哪一个呢?
- 假设我已经使用 为一个类注册了一个自定义序列化程序
@Serializable(with=...)
,是否有可能以某种方式为其获取标准序列化程序?
ktor - Kotlinx 序列化 MissingFieldException
我正在使用 Ktor 将 Moshi 序列化转换为 kotlinx 序列化,当我尝试请求获取数据时出现此错误
kotlinx.serialization.MissingFieldException:字段“附件”是必需的,但缺少
这是有道理的,因为这个特定的响应不包含这个字段
响应 JSON
但是我的序列化类的attachments
字段可以为空(它仅在需要时才在响应中)所以它应该忽略它我认为就像它对 Moshi 所做的那样
在我的 Ktor 客户端设置中,我将其设置为忽略未知键
为什么即使它可以为空,它仍然说该字段是必需的?
kotlin - 如何使用 kotlinx.serialization 序列化通用密封类
不确定是否有可能,但对于我的一生,我无法弄清楚如何序列化它。
T 中的所有内容都使用@Serializable ex: