SerializationBinder忽略来自外部程序集的未知类型

时间:2014-11-19 06:37:23

标签: c# .net serialization deserialization

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

中间错误是“SerializationException:ObjectManager发现无效的修正数。这通常表示Formatter中存在问题。”。

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

    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;
        }
    }

1 个答案:

答案 0 :(得分:1)

通过在反序列化期间强制转换为通用对象,可以在序列化期间忽略类型。要做到这一点,绑定器必须返回对象类型。

完整代码如下所示:

    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;
        }
    }