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

跨程序集反序列化BinaryFormatter对象:程序集找不到问题求解

解决BinaryFormatter反序列化时程序集不匹配的问题

BinaryFormatter序列化对象时,会将类型所属的程序集完整标识(名称、版本、公钥令牌等)写入序列化文件。你把DB_Para类复制到新程序后,该类属于当前程序集,与原程序集FTF-Para, Version=1.16.0.0的标识不匹配,导致反序列化时抛出程序集找不到的异常。

方法1:修改当前程序集标识与原程序集一致

这是最直接的方案,让你的程序集完全匹配原程序集的标识,无需修改反序列化逻辑:

  • 打开项目的.csproj文件,添加或修改以下配置:
    <PropertyGroup>
      <!-- 匹配原程序集名称 -->
      <AssemblyName>FTF-Para</AssemblyName>
      <!-- 匹配原程序集版本 -->
      <AssemblyVersion>1.16.0.0</AssemblyVersion>
      <AssemblyFileVersion>1.16.0.0</AssemblyFileVersion>
      <!-- 如果原程序集未签名,无需公钥配置;如果原程序集有签名,需导入对应的密钥对 -->
    </PropertyGroup>
    
  • 保存后重新编译项目,此时你的程序集标识与原程序集完全一致,直接用原反序列化代码即可读取文件。

方法2:自定义SerializationBinder映射类型

如果不想修改当前程序集的名称或版本,可通过自定义SerializationBinder将原程序集的类型映射到当前程序集的DB_Para类:

  1. 实现自定义Binder类:
    public class DB_ParaBinder : SerializationBinder
    {
        public override Type BindToType(string assemblyName, string typeName)
        {
            // 匹配原程序集标识和类型名(替换为原类的完整命名空间)
            if (assemblyName == "FTF-Para, Version=1.16.0.0, Culture=neutral, PublicKeyToken=null" 
                && typeName.StartsWith("原命名空间.DB_Para"))
            {
                // 返回当前程序集中的DB_Para类型
                return typeof(DB_Para);
            }
            // 其他类型按默认规则解析
            return Type.GetType($"{typeName}, {assemblyName}");
        }
    }
    
  2. 反序列化时设置Binder:
    var formatter = new BinaryFormatter();
    // 指定自定义Binder
    formatter.Binder = new DB_ParaBinder();
    using (var stream = File.OpenRead("你的文件路径.fpb"))
    {
        var para = (DB_Para)formatter.Deserialize(stream);
        // 后续处理逻辑
    }
    

关键注意事项

  • 确保当前程序中的DB_Para类与原类结构完全一致:包括字段名、类型、[Serializable]特性、[NonSerialized]标记(比如原类中PropertyChanged事件的[field: NonSerialized]必须保留),否则反序列化可能失败或数据丢失。
  • BinaryFormatter在.NET Core/.NET 5+中已被标记为过时,存在安全风险,若后续有迁移计划,建议逐步替换为更安全的序列化方式(如System.Text.Json、Protobuf等),但针对历史文件只能暂时使用该方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:10:43