2012-10-04 17 views
7

Después de cambiar el espacio de nombres de mi clase, ya no puedo deserializar los objetos. Implementé SerializationBinder. Ejemplo:No se puede deserializar con binaryFormatter después de cambiar el espacio de nombres de la clase

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

La excepción que recibo es:

'System.Runtime.Serialization.TypeLoadExceptionHolder' no se puede convertir al tipo '' MyNewNamespace.MyClass

+0

¿Necesita cambiar también el espacio de nombres en el ensamblaje? – d89761

+0

no estoy seguro de lo que estás hablando. todo lo que hice fue mover mi clase de DataBase de mi proyecto a su propio proyecto. por lo que sé, lo único que cambió fue el espacio de nombres. –

Respuesta

12

se olvidó de reemplazar el nombre del ensamblado:

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

gracias ... sí, finalmente lo descubrí, pero tiene razón, no reemplacé el nombre del ensamblado. De nuevo, gracias por tu ayuda. –

Cuestiones relacionadas