2012-10-04 4 views
7

Po zmianie przestrzeni nazw mojej klasy nie można już deserializować obiektów. Zaimplementowałem SerializationBinder. Przykład:Nie można deserializować za pomocą binaryFormatter po zmianie przestrzeni nazw klasy

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(); 

Wyjątek pojawia się:

'System.Runtime.Serialization.TypeLoadExceptionHolder' nie mogą być konwertowane do wpisania do zastąpienia 'MyNewNamespace.MyClass'

+0

Czy należy również zmienić przestrzeń nazw w zespole? – d89761

+0

nie jestem do końca pewien, o czym mówisz. wszystko, co zrobiłem, to przeniesienie mojej klasy dataBase z mojego projektu do własnego projektu. O ile wiem, jedyną rzeczą, która zmieniła się była przestrzeń nazw. –

Odpowiedz

12

zapomniałeś nazwa zestawu:

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

dzięki ... tak, w końcu to wymyśliłem, ale masz rację, nie wymieniłem nazwy zespołu. Jeszcze raz dziękuję za pomoc. –

Powiązane problemy