使用不同的 .net 框架(框架 2 和 4)进行序列化和反序列化时,很容易重现错误。当我使用框架 2 序列化 System.Globalization.CompareInfo 并尝试使用框架 4 对其进行反序列化时,将会出现 OverflowException。代码如下:
private void button1_Click(object sender, EventArgs e)
{
CompareInfo ci = CompareInfo.GetCompareInfo("de-DE");
Stream stream = File.Open("C:\\Temp\\test.bin", FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
formatter.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;
formatter.TypeFormat = System.Runtime.Serialization.Formatters.FormatterTypeStyle.XsdString;
formatter.Serialize(stream, ci);
stream.Close();
}
private void button2_Click(object sender, EventArgs e)
{
Stream stream = File.Open("C:\\Temp\\test.bin", FileMode.Open);
BinaryFormatter formatter = new BinaryFormatter();
CompareInfo ci = (CompareInfo)formatter.Deserialize(stream);
stream.Close();
}
当我使用相同的版本(2 或 4)执行此操作时,它按预期工作。当我用框架 2 保存文件并尝试用框架 4 打开它时,我会得到 OverflowException。现在我正在寻找一种解决方法(因为我们的客户有数千个使用框架 2.0 编写的文件)。我尝试了一种方法,例如如何添加充当 ISerializable 接口的自定义序列化属性,但没有成功。有任何想法吗?
对不起,我省略了导致可能代码崩溃的两行:
formatter.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;
formatter.TypeFormat = System.Runtime.Serialization.Formatters.FormatterTypeStyle.XsdString;
因为我认为它们没有必要。现在我更新了代码,它正在崩溃。读取文件时包含这些行无济于事。