C#二进制格式化程序 - 反序列化会引发IO异常

时间:2013-09-18 09:34:41

标签: c# .net binary unity3d deserialization

所以我有一个包含一些内容的序列化二进制文件,我正在尝试反序列化它。

我有:

    try
    {
        using (Stream stream = File.Open(file, FileMode.Open))
        {
            BinaryFormatter bin = new BinaryFormatter();

            var contents = bin.Deserialize(stream);
        }
    }
    catch (IOException io)
    {
        Debug.LogError(io.ToString());
    }

但我得到IO异常

  

System.IO.FileNotFoundException:无法加载文件或程序集   '包装工具,版本= 1.0.0.0,文化=中立,   PublicKeyToken = null'或其依赖项之一。系统不能   找到指定的文件。文件名:'Packaging Tool,Version = 1.0.0.0,   Culture = neutral,PublicKeyToken = null'

这是文件本身的开始。我在一个控制台应用程序中尝试了它,它运行得很好,但是当我将它导入Unity3D时,事情变得混乱。有人知道问题根源在哪里吗?

此外,当我用bin.Deserialize评论该行时,异常消失。

2 个答案:

答案 0 :(得分:0)

在运行时似乎无法找到一个或多个程序集。该错误可能是由于包含Packaging Tool的文件丢失或未包含在输出目录中。

当您导入Unity3D时,是否还导入了依赖项?即,Packaging Tool文件?

答案 1 :(得分:0)

Deserialize方法将字节流转换为对象,在序列化期间,二进制格式化程序尝试查找在名为Packaging Tool的程序集中显然声明的对象。由于无法找到程序集,因此无法实例化对象,因此会抛出异常。

确保包装工具程序集存在于您的应用程序文件夹中或在GAC中注册。