2012-10-04 48 views
7

更改我的类的名称空间后,我无法再反序列化对象。我已实施SerializationBinder。例如:更改类名称空间后,无法使用binaryFormatter反序列化

public class TypeNameConverter : SerializationBinder 
{ 
    public override Type BindToType(string assemblyName, string typeName) 
    { 
     typeName = typeName.Replace("MyOldNamespace", "MyNewNamespace"); 
     return Type.GetType(string.Format("{0}, {1}", typeName, assemblyName)); 
    } 
} 

BinaryFormatter bf = new BinaryFormatter(); 
bf.Binder = new TypeNameConverter(); 

我得到的例外是:

'System.Runtime.Serialization.TypeLoadExceptionHolder' 不能转换为类型 'MyNewNamespace.MyClass'

+0

您是否还需要更改程序集中的命名空间? – d89761

+0

不完全确定你在说什么。我所做的只是将我的dataBase类从我的项目中移出并放入它自己的项目中。据我所知唯一改变的是命名空间。 –

回答

12

你忘了更换程序集名称:

class TypeNameConverter : SerializationBinder 
{ 
    public override Type BindToType(string assemblyName, string typeName) 
    { 
     typeName = typeName.Replace("MyOldNamespace", "MyNewNamespace"); 
     assemblyName = assemblyName.Replace("MyOldNamespace", "MyNewNamespace"); 
     return Type.GetType(string.Format("{0}, {1}", typeName, assemblyName)); 
    } 
} 
+0

谢谢...是的,我最终搞清楚了,但你是对的我没有取代组件名称。再次感谢你的帮助。 –

相关问题