See the question and my original answer on StackOverflow

The underlying code just can't find the ClassLibrary2 assembly full name that's been written down in the test.xml file automatically. It needs some help.

You can workaround this if you hook the AppDomain.AssemblyResolve Event prior deserialization, something like this:

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainAssemblyResolve;
...
var instream = new FileStream("test.xml", FileMode.Open);
var conf = ser.ReadObject(instream);
...

private static Assembly CurrentDomainAssemblyResolve(object sender, ResolveEventArgs args)
{
    if (args.Name == "ClassLibrary2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") // adapt to your needs of course
        return Assembly.LoadFrom(@"mypath\ClassLibrary2.dll");

    return null; // don't know for this one
}