问题标签 [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.
kotlin - 接口/实现的序列化器
假设有一个接口和 2 个(或更多)实现:
我想实现网络传输最简洁的JSON,即{"runnable":"H"}
for Horse和{"runnable":"D"}
for Dog
如果我无法修改接口和实现,我想将接口/实现序列化为 JSON,根据 Kotlin 的文档,我必须编写一个 自定义序列化程序,并使用它SerializersModule
来实现目标。
假设只有Horse
和Dog
实施IRunnable
,这就是我所做的:
但是当我尝试将 a 转换Horse
为 JSON ...
它输出错误:
在这种情况下如何实现类似
{"runnable":"H"}
或{"runnable":"D"}
?
谢谢。
环境:
更新,完整的错误信息:
kotlin - 根据字段值反序列化为密封子类
我有一个字段,我想根据该 Json 对象上的值将其反序列化为密封子类的实例。
响应模型:
我的密封类
就目前而言,我得到了一个序列化异常,因为序列化程序不知道该怎么做:
kotlinx.serialization.SerializationException:sealed_subclass_one 未在 com.myapp.MyResponse 类的范围内注册多态序列化
是否有一种简单的方法来注册 的值,type
以便在没有自定义序列化程序的情况下进行反序列化?
android - 如何为 ArrayList 使用 KotlinX 序列化和日期类型与 Algolia
我正在尝试将kotlinx serialization
与 Algolia 一起用于类型ArrayList<String>
,Date
但我无法弄清楚该serialization
技术。任何指针,因为我采用了Algolia
.
kotlin - Mongo 和 Kotlin 的委托问题
我最近一直在使用Kmongo 库和 Kotlin,但是我在 Kmongo 上提出了一个问题,但我不确定它是否与库有关。
我正在尝试将我的数据保存到我的 mongo 数据库(版本 4.2.2)
当我插入数据时,我只发送了一个这样的对象:val person = Person("John", "Doe")
但是当我检查我的 mongo 数据库时
如何防止fullName
保存在我的数据库中?
编辑:
我试图@Transient
在我的变量上使用注释,但它不起作用,并且我收到一条检查消息说:Property does not have backing field which makes it non-serializable and therefore @Transient is redundant
kotlin - 如何使用 kotlinx.serialization 将库类序列化为 Protobuf?
如何使用kotlinx.serialization将库类序列化为 Protobuf ?由于它是不可编辑的,因此我无法按照runtime_usage.md#protobuf@SerialId
中的说明为其属性添加注释。如果我在custom_serializers.md中编写自己的外部序列化程序,它不会告诉我如何为 Protobuf 序列化指定 s。SerialId
例如,我正在尝试序列化 a java.math.BigDecimal
,将其存储为unscaledValue
asbytes
并将其存储scale
为sint32
。使用原始的 Protobuf Java 库很容易做到这一点,但我想知道如何使用kotlinx.serialization做到这一点。
kotlin - @SerialInfo - 如何使用 Kotlinx 序列化管理用户定义的串行注释?
Kotlinx 序列化文档
根据Kotlinx.serialization
用户定义的注释文档:
“在序列化/反序列化过程中,您自己的注释类在
SerialDescriptor
对象中可用”:
我想做的事
我需要一个@Transient
等价的,但有条件的:
- 经典方式 where :
Json.stringify(serializer, myClass)
照常工作。 - 自定义方式 where :
Json.stringify(customSerializer, myClass)
将返回通常的 json 但排除所有@MyAnnotation
-tagged 值。
这是我的代码
我想构建一个自定义序列化器并实现类似
我发现了什么
但我不知道如何构建自定义序列化程序,以便我可以覆盖该函数Encoder.encodeElement
。我可以在哪里访问自定义 Serializer 中的 ElementValueEncoder ?
我还在kotlinx.serialization github repo 中找到了这个示例演示。它使用TaggedEncoder
&TaggedDecoder
我可以覆盖的地方encodeTaggedValue
。但是在这里我不知道如何在序列化/反序列化过程中使用这些编码器/解码器。
最后
我在哪里可以覆盖fun encodeElement(desc: SerialDescriptor, index: Int): Boolean
,以及如何处理我自己定义的序列化注释?
谢谢 !!
kotlin - 标记为 @Serializable 的 kotlinx-serialization 类没有 .serializer() 扩展函数
我有以下数据类
现在,当我尝试使用 .serializer() 函数时,它说 .serializer() 没有为 Income 类定义,因此我的项目无法编译。
我在readme.md中的文档上看了两遍。甚至观看了KotlinConf的公告视频
有没有人有同样的问题。我究竟做错了什么??
编辑:
我试图从 readme.md 中复制粘贴样本,但遇到了同样的问题。
这在我的代码中也无法编译。我目前正在使用 Kotlin 1.3..61 和 kotlinx-serialization-runtime 0.14.0
android - 带有通用消息包装器的 kotlinx 序列化
所以我有这个类:
我想将其用于从服务器发送到客户端的每条消息。我已经不得不更改以下函数,因为我不知道如何将序列化与泛型一起使用
至
但是现在我的客户抛出了这个错误:java.lang.RuntimeException: Failed to invoke private com.kvw.letsgo.common.Message() with no args
如何在序列化中正确使用泛型?
kotlin - 将 kotlinx.serialization 库与 Bazel 的 rules_kotlin 一起使用
如何将 kotlinx.serialization 库与 Bazel 的 rules_kotlin 一起使用?
这是我尝试过的:
,其中 Foo 是 :dto 包中的一个类。
我可以构建 dto 库,但我得到了
当我在其他包中使用 dto 库时。
spring-boot - 如何将 Spring Boot 映射器从 Jackson 交换到 kotlinx.serialization
我希望我的 Spring Boot 项目使用 kotlinx.serialization。我不知道如何正确交换映射器...如果我想使用 GSON,我可以通过 spring.http.converters.preferred-json-mapper=gson 在 props 中记下它。
有没有人在这方面取得成功?