如何使用 kotlinx.serialization 将库类序列化为 Protobuf?
Posted
技术标签:
【中文标题】如何使用 kotlinx.serialization 将库类序列化为 Protobuf?【英文标题】:How to serialize a library class to Protobuf with kotlinx.serialization? 【发布时间】:2020-05-12 17:18:24 【问题描述】:如何使用kotlinx.serialization 将库类序列化为 Protobuf?由于它不可编辑,我无法按照runtime_usage.md#protobuf 中的说明将@SerialId
注释添加到其属性中。如果我像 custom_serializers.md 那样编写自己的外部序列化程序,它不会告诉我如何为 Protobuf 序列化指定 SerialId
s。
例如,我正在尝试序列化java.math.BigDecimal
,将其unscaledValue
存储为bytes
,将其scale
存储为sint32
。使用原始的 Protobuf Java 库很容易做到这一点,但我想知道如何使用 kotlinx.serialization 做到这一点。
【问题讨论】:
【参考方案1】:您可以对您无法控制的类使用上下文序列化。例如,像这样定义您的序列化程序(在我的情况下为 json,但您明白了)
val kxJson = Json
serializersModule = SerializersModule
contextual(java.math.BigDecimal::class, BigDecimalKSerializer)
然后实现你的BigDecimalKSerializer
。在使用BigDecimal
的类中,您应该使用@Contextual
注释字段。
更多详情请联系here。
【讨论】:
以上是关于如何使用 kotlinx.serialization 将库类序列化为 Protobuf?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?