我们说我有这堂课:
[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这样的原始类型。
答案 0 :(得分:1)
序列化的OldClass
数据只包含两个值,X
和Z
或X
和Y
,因为您使用的是两个相同的成员索引不同的领域。
假设您没有遇到此问题,可以保留OldClass
,反序列化为OldClass
,然后在NewClass
上设置一个接受OldClass
的构造函数。 ProtoBuf不需要了解它。