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

Shr*_* Ye 8 protocol-buffers kotlin kotlinx.serialization

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

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

exp*_*ert 0

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

val kxJson = Json {
    serializersModule = SerializersModule {
        contextual(java.math.BigDecimal::class, BigDecimalKSerializer)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

更多详细信息请参见此处