Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SerializationBinder忽略外部程序集中的未知类型_C#_.net_Serialization_Deserialization - Fatal编程技术网

C# SerializationBinder忽略外部程序集中的未知类型

C# SerializationBinder忽略外部程序集中的未知类型,c#,.net,serialization,deserialization,C#,.net,Serialization,Deserialization,我需要反序列化由其他程序集创建的二进制文件。类型名是相同的,因此在BindToType上,我更改类的全名并返回找到的类型。它工作正常,但有些类我不支持,我需要忽略它们。如果我返回null,则由于找不到该类而引发异常 中间错误是“SerializationException:ObjectManager发现的修复数量无效。这通常表示格式化程序中存在问题。” 如何忽略未知类型,同时反序列化对象 sealed class MyAsemblyBinder : System.Runtime.Seri

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

中间错误是“SerializationException:ObjectManager发现的修复数量无效。这通常表示格式化程序中存在问题。”

如何忽略未知类型,同时反序列化对象

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