在我们的.NET应用程序中,我们依赖于应用程序项目文件的二进制序列化。主项目类文件使用以下方法序列化自身(请注意,为清晰起见,将删除所有异常处理)。
public void ProjectSerialize(string filename)
{
Stream s = File.Open(filename, FileMode.Create);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(s, this);
}
该类有许多存储的方法和属性。现在一切正常,但是当我们想要发布具有新版本项目类的应用程序的新版本时,我们不再与早期版本兼容。我知道这是一个设计错误,因为当然我必须使用我自己定义的序列化,我不应该依赖.NET来处理这种重要类型的文件。
现在我的问题是,如何阅读旧的序列化项目文件?有没有我应该知道的格式,.NET首先如何序列化?我只是希望我的客户与旧的fileformat兼容,但我现在不知道如何为旧的存储项目文件编写文件转换器。
谢谢,
埃里克
答案 0 :(得分:1)
您是否在源代码管理中拥有旧版本的项目?
如果是这样,我建议您使用它来加载现有数据,然后以更加版本友好的方式将其写出,以便新代码能够成功读取。
顺便说一句,您应该关闭流以确保刷新所有数据:
public void ProjectSerialize(string filename)
{
using (Stream s = File.Open(filename, FileMode.Create))
{
BinaryFormatter b = new BinaryFormatter();
b.Serialize(s, this);
}
}
答案 1 :(得分:1)
现在有点晚了,但也许你应该阅读Version Tolerant Serialization?