重命名基ProtoBuf.Netclass后反序列化一个protobuf序列化数据;

Deserialize a protobuf serialized data after renaming the base ProtoBuf.Net class;

我的旧版本应用程序中有以下 classes。

FooBase.cs


[ProtoContract]
[ProtoInclude(1, typeof(Baz)]
[ProtoInclude(3, typeof(Qux)]
public abstract class FooBase
{
     [ProtoMember(5)]
     public int Bar { get; set;}
}

Baz.cs


[ProtoContract]
public class Baz : FooBase
{
    [ProtoMember(1)]
    public string Quux {get;set;}
}

Qux.cs


[ProtoContract]
public class Qux : FooBase
{
    [ProtoMember(1)]
    public string Corge {get;set;}
}

现在我们有一些数据使用 Protobuf.Net 序列化为 BarQux

现在,在下一个版本中,我们决定也可以序列化为 FooBase。 所以,FooBase 不再是抽象的 class.

我真的很想将 FooBase 重命名为 Foo 问题是, 如果我将 FooBase 重命名为 Foo

Foo.cs


[ProtoContract]
[ProtoInclude(1, typeof(Baz)]
[ProtoInclude(3, typeof(Qux)]
public class Foo
{
     [ProtoMember(5)]
     public int Bar { get; set;}
}

是否仍然可以将我的旧数据反序列化为 BazQux

我无法从可用文档中找到任何答案。

在二进制协议级别,protobuf 不讨论名称;它专门谈论数字。如果您使用的是代码优先,则可以 整天 更改名称 - 没关系。您可以从 Foo 序列化并反序列化为 NewFooFinal3 - 很好。只是不要更改数字。

(注意:除非您使用 v2 中的“动态类型”功能,否则 v3 中已弃用)