如何使用kotlinx.serialization将库类序列化为Protobuf?

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

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

a405387759 回答:如何使用kotlinx.serialization将库类序列化为Protobuf?

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

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

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

更多详情见here

本文链接:https://www.f2er.com/2706314.html

大家都在问