protobuf-net向后兼容性

时间:2015-01-07 22:32:41

标签: .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;
}

[ProtoContract]
public class Container
{
   [ProtoMember(1)] int X;
   [ProtoMember(2)] int Y;
}

有没有办法将OldClass反序列化为NewClass? 基本上我想移动一些成员,创建一些容纳它们的容器子类,但是我已经将许多OldClass类序列化并存储在磁盘上,并且希望能够加载它们。

这些X,Y,Z成员并不总是像int这样的原始类型。

1 个答案:

答案 0 :(得分:1)

序列化的OldClass数据只包含两个值,XZXY,因为您使用的是两个相同的成员索引不同的领域。

假设您没有遇到此问题,可以保留OldClass,反序列化为OldClass,然后在NewClass上设置一个接受OldClass的构造函数。 ProtoBuf不需要了解它。