和Java serialization, there was serialVersionUID在一起。我不知道这有多好,但它至少是一种简单的机制,用于测试类是否在序列化和反序列化之间进行了更改。kotlinx.serialization是否有任何这样的机制来匹配序列化的类的版本与当前的版本(例如,可能是SerialDescriptor的校验和或哈希码)?如果没有,有没有推荐的最佳实践来避免这类bug?
发布于 2021-05-19 06:10:04
serialVersionUID似乎不是一种跟踪更改的机制。相反,它是 deserialization early if there is a version mismatch的一种机制
如果接收方为对象加载的类具有与相应发送方的类不同的serialVersionUID,则反序列化将导致InvalidClassException。
kotlinx.serialization会失败,具体取决于特定的编码器/解码器及其配置方式。例如,可以将Json配置为在意外字段上失败,或者以静默方式忽略它们。
如果串行描述符与预期的序列化数据不匹配,您将获得运行时序列化异常;因此,一些序列化逻辑将会运行,但仍然会失败。
因此,问题是您希望实现什么目标。如果你想早点失败(不确定为什么这是一个好处),你可以按照你的建议编写一个定制的序列化程序,其中包含一个基于SerialDescriptor中包含的信息的哈希码。
实际上,您最好在系统中的其他地方应用一些版本控制,例如在确定有效负载版本的包装器中。
https://stackoverflow.com/questions/66464194
复制相似问题