2012-10-04 26 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

謝謝...是的,我最終搞清楚了,但你是對的我沒有取代組件名稱。再次感謝你的幫助。 –

相關問題