8

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

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

4

1 回答 1

0

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

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

然后实现你的BigDecimalKSerializer. 在您使用的类中,BigDecimal您应该使用@Contextual.

更多细节在这里

于 2021-02-10T09:16:08.653 回答