Can't deserialize with binaryFormatter after changing namespace of class
Asked Answered
I

1

9

After changing the namespace of my class I can no longer deserialize the objects. I've implemented SerializationBinder. Example:

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

The exception I get is:

'System.Runtime.Serialization.TypeLoadExceptionHolder' cannot be converted to type 'MyNewNamespace.MyClass'

Idola answered 4/10, 2012 at 23:48 Comment(2)
Do you need to change the namespace in the assembly too?Interactive
not exactly sure what you're talking about. all I did was move my dataBase class out of my project and into it's own project. as far as i know the only thing that changed was the namespace.Idola
B
14

you forgot to replace the assembly name:

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));
    }
}
Beauregard answered 19/12, 2012 at 17:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.