Protobuf C#如何删除字段?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Protobuf C#如何删除字段?相关的知识,希望对你有一定的参考价值。

我在protobuf中将字段序列化为二进制文件。现在我要删除一个字段。

[ProtoMember(9, AsReference = true)]// to remove
 private MyClass obj; // to remove

现在我想离开序列化这个对象,并从序列化中删除,但我需要打开旧文件。所以我无法打开这个文件。当我尝试打开文件时,我有异常:

Internal error; a key mismatch occurred
答案

你最好的选择可能就是把它放在原处,并添加:

private bool ShouldSerializeobj() => false;

这增加了成员obj的“条件序列化”,这意味着它不会被序列化。但是,在反序列化时仍将处理它。

注意:正是AsReference = true使这更复杂。通常,您只需删除该字段即可。

以上是关于Protobuf C#如何删除字段?的主要内容,如果未能解决你的问题,请参考以下文章

protobuf repeated 怎么用的

golang protobuf unknown字段透传

使用JSON模式验证protobuf消息?

如何减少protobuf生成的代码?

Protobuf“字段1”的意义是啥?

如何在protobuf中设置重复字段至少重复一次