You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# BinaryFormatter二进制序列化及反序列化报错求助

解决BinaryFormatter序列化/反序列化问题的建议

问题背景

你使用BinaryFormatter序列化含自定义成员的类对象时,先后遇到两个问题:

  1. 未给自定义类添加[Serializable]特性时,序列化文件内容异常,反序列化报错:End of Stream encountered before parsing was completed.
  2. 添加特性后序列化文件正常,但反序列化报错:Unable to find assembly 'Lib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

解决步骤

1. 确保反序列化环境存在目标程序集

  • 将包含Lib程序集的DLL文件复制到反序列化程序的运行目录(如bin/Debug/netX.x文件夹)。
  • 若为同一解决方案内的项目,直接添加对Lib项目的引用,确保编译时自动复制依赖文件。

2. 匹配程序集版本与签名

  • 检查序列化、反序列化环境中Lib程序集的版本号、公钥令牌是否完全一致。如果程序集版本更新过,用新版本重新生成序列化文件。
  • 若程序集是强签名的,确保两端的公钥令牌相同,避免因签名不匹配导致无法识别。

3. 配置程序集绑定重定向(版本兼容场景)

如果需要兼容不同版本的Lib程序集,可在反序列化程序的配置文件(App.config/Web.config)中添加绑定重定向,让CLR自动映射版本:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Lib" publicKeyToken="null" culture="neutral"/>
        <bindingRedirect oldVersion="1.0.0.0" newVersion="你的实际程序集版本"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

4. 替换BinaryFormatter(长期推荐方案)

BinaryFormatter已被标记为过时,存在安全漏洞且依赖强程序集绑定,建议改用更灵活的序列化方式:

  • JSON序列化:使用System.Text.Json或Newtonsoft.Json,无需依赖特定程序集,跨环境兼容性更强。
  • DataContractSerializer:给自定义类添加[DataContract]、[DataMember]特性,相比BinaryFormatter更可控,程序集依赖问题更容易处理。

内容的提问来源于stack exchange,提问作者user8677843

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:05:19