, поскольку вы уже реализовали интерфейс ISerializable, вы, вероятно, также уже добавили необходимый конструктор:
public MainClass(SerializationInfo info, StreamingContext context) {}
Вы можете использовать информационный объект, переданный конструктору, для извлечения данных из сериализованного файла. по умолчанию (т.е. когда не реализован ISerializable), имена полей используются как идентификаторы во время сериализации. так что если в вашем старом классе было поле "int x", вы можете десериализовать это, используя:
this.x = info.GetInt32("x");
для более новых версий я обычно добавляю запись "версия" во время сериализации, например:
public void GetObjectData(SerializationInfo info, StreamingContext context) {
info.AddValue("version", 1);
info.AddValue("othervalues", ...);
}
во время десериализации вы можете проверить запись этой версии и соответственно десериализовать:
public MainClass(SerializationInfo info, StreamingContext context) {
int version;
try {
version = info.GetInt32("version");
}
catch {
version = 0;
}
switch (version) {
case 0:
// deserialize "old format"
break;
case 1:
// deserialize "new format, version 1"
break;
default:
throw new NotSupportedException("version " + version + " is not supported.");
}
}
Я не скомпилировал этот код, может содержать опечатки.
надеюсь, что это поможет.