【发布时间】:2018-03-02 10:23:25
【问题描述】:
我在 protobuf 中将字段序列化为二进制文件。现在我想删除一个字段。
[ProtoMember(9, AsReference = true)]// to remove
private MyClass obj; // to remove
现在我想离开序列化这个对象,并从序列化中删除,但我需要打开旧文件。所以我无法打开这些文件。当我尝试打开文件时出现异常:
Internal error; a key mismatch occurred
【问题讨论】:
-
我不确定这是否有效/没有尝试过:删除属性注释并保留数字“空闲”(因为其他属性不应该有数字 9)。当您收到有关密钥不匹配的异常时,请尝试以下操作:在运行时模型中/为运行时模型创建一个新方案,按原样添加类型,然后调用
model[type].Add(9, "obj")并尝试使用该方案进行反序列化。序列化显然只能使用Default方案来完成。将其写为评论,因为我不知道这是否有效。以这种方式转换所有文件后,您可以删除 catch 块的属性和主体。
标签: c# serialization protocol-buffers protobuf-net