我有一个简单的应用程序,我在其中将包含所有配置文件对象的配置文件处理程序序列化到磁盘。它工作得很好……但让我感到震惊的是,将来会有问题。
下次我更新软件时,配置文件可能会发生变化,包括新的字段和属性,或者某些类型可能会发生变化。当尝试从早期版本反序列化时,这当然会破坏程序。
解决这个问题的最简单和最直接的方法是什么?我在想应该有一种方法可以在二进制文件中添加一些标头位,然后以某种方式检查它们。
这是我的序列化方法:
private void SaveProfilesToDisk()
{
var serializer = new BinaryFormatter();
string filename = Path.Combine(Environment.CurrentDirectory, @"MyApp\MyApp.profiles");
using (FileStream fileStream = File.OpenWrite(filename))
{
serializer.Serialize(fileStream, _profileHandler);
}
}
这就是我反序列化它的方式:
private ProfileHandler LoadProfilesFromDisk()
{
var serializer = new BinaryFormatter();
string filename = Path.Combine(Environment.CurrentDirectory, @"MyApp\MyApp.profiles");
using (FileStream fileStream = File.OpenRead(filename))
{
return (ProfileHandler) serializer.Deserialize(fileStream);
}
}
我可以简单地告诉用户保存文件已过时,重命名/删除它并创建一个新文件。