0

使用不同的 .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;

因为我认为它们没有必要。现在我更新了代码,它正在崩溃。读取文件时包含这些行无济于事。

4

0 回答 0