序列化绑定程序,用于忽略外部程序集中的未知类型

本文关键字:程序 集中 程序集 未知 类型 外部 绑定 用于 序列化 | 更新日期: 2023-09-27 18:30:52

我需要反序列化由其他程序集创建的二进制文件。类型名称是相同的,因此在 BindToType 上,我更改了类的全名并返回找到的类型。它工作正常,但有些类我不支持,我需要忽略它们。如果我返回 null,则会抛出异常,因为找不到该类。

中间错误是"序列化异常:对象管理器发现无效数量的修正。这通常表示格式化程序存在问题。

如何忽略未知类型并在同一时刻反序列化对象?

    sealed class MyAsemblyBinder : System.Runtime.Serialization.SerializationBinder
    {
        public override Type BindToType(string assemblyName, string typeName)
        {
            string myAsm = System.Reflection.Assembly.GetExecutingAssembly().FullName;
            Type foundType = Type.GetType(String.Format("{0}, {1}", typeName, myAsm));
            return foundType;
        }
    }

序列化绑定程序,用于忽略外部程序集中的未知类型

通过在反序列化期间强制强制转换为泛型对象,可以在序列化期间忽略类型。为此,绑定器必须返回对象的类型。

完整代码如下所示:

    sealed class MyAsemblyBinder : System.Runtime.Serialization.SerializationBinder
    {
        public override Type BindToType(string assemblyName, string typeName)
        {
            string myAsm = System.Reflection.Assembly.GetExecutingAssembly().FullName;
            Type foundType = Type.GetType(String.Format("{0}, {1}", typeName, myAsm));
            if (foundType == null)
                foundType = typeof(Object);
            return foundType;
        }
    }