反序列化异常:找不到程序集

Posted

技术标签:

【中文标题】反序列化异常:找不到程序集【英文标题】:Deserialization exception : Unable to find assembly 【发布时间】:2014-06-04 11:03:52 【问题描述】:

我从事 winforms 项目。

我尝试反序列化一个对象:

private void CreateObjects()
        
            try
            
                using (FileStream fs = new FileStream("path to file", FileMode.Open))              
                   sObjects = (Objects)(new BinaryFormatter().Deserialize(fs)); 
            
            catch (Exception ex)
            
                MessageBox.Show(ex.ToString());
            
        

但在这一行:

sObjects = (Objects)(new BinaryFormatter().Deserialize(fs)); 

我得到了这个例外:

找不到程序集“TheNameOfTheClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。

知道什么可能导致此异常吗?

【问题讨论】:

你有那个组件吗? 你能从这部分代码手动实例化'TheNameOfTheClass'吗? 【参考方案1】:

如果你的类包含没有 Serializeable 标签的对象,你不能反序列化它们。您需要使用 NonSerializable 标记标记这些对象。

http://msdn.microsoft.com/en-us/library/system.nonserializedattribute.aspx

【讨论】:

【参考方案2】:

如果在您的 AssemblyInfo.cs 版本中定义如下:

[assembly: AssemblyVersion("1.0.*.*")]
[assembly: AssemblyFileVersion("1.0.*.*")]

然后改成这样:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

【讨论】:

以上是关于反序列化异常:找不到程序集的主要内容,如果未能解决你的问题,请参考以下文章

找不到源类型的查询模式的实现:反序列化服务响应时找不到选择

DataContractSerializer:在流中找不到引用 id 'xyz' 的反序列化对象。如何恢复数据?

为 Jackson 自定义反序列化程序抛出带有 HTTP 状态代码的自定义异常

IPC反序列化异常仅在接收数据时?发送工作正常

如何序列化/反序列化 C# WCF DataContract 到 XML

当我尝试在 .NET Core 中反序列化 FormFile 对象时,为啥会出现奇怪的异常?