gpt4 book ai didi

Protobuf-net 错误 - 序列化设置为 null 的固定数组

转载 作者:行者123 更新时间:2023-12-02 02:25:20 25 4
gpt4 key购买 nike

我正在使用 protobuf-net 库来序列化一些对象。我有一个领域

[ProtoMember(3, DataFormat = DataFormat.FixedSize, IsPacked = true)]
ushort[] foo;

当我将它设置为说 ushort[] { 3 } 然后序列化整个对象并将其读回时,一切正常。然后,当我将 foo 设置为空数组或 null 并序列化并再次读回时,它不会被删除。我最终得到了其中包含 3 的数组。为了确保这不是某些文件系统问题,我更改了其他属性并进行了往返,它们都按预期运行。

有谁知道这是实现中的错误还是功能?

最佳答案

如果没有可重现的示例,它不是完全清楚的,但 IMO 最有可能的答案是您正在覆盖输出流(例如文件)而不截断它。因为 protobuf 规范不包括 root 对象的终止符(等),它会读取到文件末尾。如果您随后用较少的数据覆盖,则任何未被截断的内容都是垃圾。

现在,如果更改意味着末尾的垃圾不解析为 protobuf,you'll get an exception, like this .但是,如果数据仍然有效(因为,例如 foo 是流中的最后一项),那么它只会读取并处理它。特别是,设置集合会导致该项目不被写入,因此为什么将其设置为 null 仍然会留下有效流(如果它是要序列化的最终字段)。

如果您还没有这样做,请确保修剪您的输出(上面链接的帖子中显示了执行此操作的 2 种简单方法)。

如果这无关紧要,那么我深表歉意 - 但在没有更多信息/可重现示例的情况下,我不得不进行一些猜测;p

关于Protobuf-net 错误 - 序列化设置为 null 的固定数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6214143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com