重命名基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 序列化为 Bar
和 Qux
现在,在下一个版本中,我们决定也可以序列化为 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;}
}
是否仍然可以将我的旧数据反序列化为 Baz
和 Qux
?
我无法从可用文档中找到任何答案。
在二进制协议级别,protobuf 不讨论名称;它专门谈论数字。如果您使用的是代码优先,则可以 整天 更改名称 - 没关系。您可以从 Foo
序列化并反序列化为 NewFooFinal3
- 很好。只是不要更改数字。
(注意:除非您使用 v2 中的“动态类型”功能,否则 v3 中已弃用)
我的旧版本应用程序中有以下 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 序列化为 Bar
和 Qux
现在,在下一个版本中,我们决定也可以序列化为 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;}
}
是否仍然可以将我的旧数据反序列化为 Baz
和 Qux
?
我无法从可用文档中找到任何答案。
在二进制协议级别,protobuf 不讨论名称;它专门谈论数字。如果您使用的是代码优先,则可以 整天 更改名称 - 没关系。您可以从 Foo
序列化并反序列化为 NewFooFinal3
- 很好。只是不要更改数字。
(注意:除非您使用 v2 中的“动态类型”功能,否则 v3 中已弃用)