.net protobuf网络向后兼容性
假设我有一门课:.net protobuf网络向后兼容性,.net,protobuf-net,.net,Protobuf Net,假设我有一门课: [ProtoContract] public class OldClass { [ProtoMember(1)] int X; [ProtoMember(2)] int Y; [ProtoMember(2)] int Z; } 如果我将OldClass更改为: [ProtoContract] public class NewClass { Container container; [ProtoMember(2)] int Z; } [Proto
[ProtoContract]
public class OldClass
{
[ProtoMember(1)] int X;
[ProtoMember(2)] int Y;
[ProtoMember(2)] int Z;
}
如果我将OldClass更改为:
[ProtoContract]
public class NewClass
{
Container container;
[ProtoMember(2)] int Z;
}
[ProtoContract]
public class Container
{
[ProtoMember(1)] int X;
[ProtoMember(2)] int Y;
}
有没有办法将旧类反序列化为新类?
基本上我想移动一些成员,创建一些容器子类来保存它们,但是我有很多OldClass类已经序列化并存储在磁盘上,并且希望能够加载它们
这些X、Y、Z成员并不总是像int那样的基本类型。序列化的
OldClass
数据只包含两个值,或者X
和Z
或者X
和Y
,因为您对两个不同的字段使用相同的成员索引
假设您没有这个问题,您可以只保留
OldClass
,反序列化到OldClass
,然后在NewClass
上有一个接受OldClass
的构造函数。ProtoBuf不需要知道它。如果我已经将几个OldClass和NewClass实例序列化到不同的文件,现在需要反序列化到NewClass,该怎么办?只需添加try{DeserializeToNewClass()}catch(错误类异常){DeserializeToOldClass();ConvertOldToNew();}
block?不确定是否有更好的选项。将来,您应该使用版本信息编写文件头,让您知道文件中的序列化数据到底是什么。