微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

kotlinx.serialization 是否处理类版本?

如何解决kotlinx.serialization 是否处理类版本?

Java serialization,there was serialVersionUID。我不知道它的效果如何,但它至少是一种用于测试类是否在序列化和反序列化之间发生变化的简单机制。 kotlinx.serialization 是否有任何这样的机制来匹配与当前序列化的类的版本(例如,SerialDescriptor 的校验和或哈希码)?如果没有,是否有推荐的最佳做法来避免此类错误

解决方法

serialVersionUID 似乎不是一种跟踪更改的机制。相反,它是一种fail deserialization early if there is a version mismatch

如果接收方为对象加载了一个类,该类的 serialVersionUID 与相应发送方的类不同,那么反序列化将导致 InvalidClassException。

kotlinx.serialization 失败取决于特定的编码器/解码器及其配置方式。例如,Json 可以配置为在意外字段上失败,或者静默忽略它们。

如果串行描述符与预期的序列化数据不匹配,您将获得运行时序列化异常;所以一些序列化逻辑会运行,但它仍然会失败。

因此,问题是您希望实现的目标。如果您想尽早失败(不确定为什么会有好处),您可能会根据您的建议编写一个自定义序列化程序,其中包含基于 SerialDescriptor 中包含的信息的哈希码。

实际上,您可能最好在系统的其他地方应用一些版本控制,例如在确定有效负载版本的包装器中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。