Скажем, у меня есть этот класс:Protobuf-сеть обратная совместимость
[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.
Это хорошая идея. – Michal
Что делать, если я сериализовал несколько экземпляров OldClass, а также экземпляры NewClass для разных файлов, и теперь вам нужно десериализовать NewClass? Просто добавьте 'try {DeserializeToNewClass()} catch (WrongClassException) {DeserializeToOldClass(); ConvertOldToNew();} 'block? – Michal
Не уверен, что есть лучший вариант. – Rotem