【问题标题】:How to serialize a library class to Protobuf with kotlinx.serialization?如何使用 kotlinx.serialization 将库类序列化为 Protobuf?
【发布时间】:2020-05-12 17:18:24
【问题描述】:

如何使用kotlinx.serialization 将库类序列化为 Protobuf?由于它不可编辑,我无法按照runtime_usage.md#protobuf 中的说明将@SerialId 注释添加到其属性中。如果我像 custom_serializers.md 那样编写自己的外部序列化程序,它不会告诉我如何为 Protobuf 序列化指定 SerialIds。

例如,我正在尝试序列化java.math.BigDecimal,将其unscaledValue 存储为bytes,将其scale 存储为sint32。使用原始的 Protobuf Java 库很容易做到这一点,但我想知道如何使用 kotlinx.serialization 做到这一点。

【问题讨论】:

    标签: kotlin protocol-buffers kotlinx.serialization


    【解决方案1】:

    您可以对您无法控制的类使用上下文序列化。例如,像这样定义您的序列化程序(在我的情况下为 json,但您明白了)

    val kxJson = Json {
        serializersModule = SerializersModule {
            contextual(java.math.BigDecimal::class, BigDecimalKSerializer)
        }
    }
    

    然后实现你的BigDecimalKSerializer。在使用BigDecimal 的类中,您应该使用@Contextual 注释字段。

    更多详情请联系here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      相关资源
      最近更新 更多