title: SerializationBinder with List<T>
body: <p>I'm trying to make the <code>BinaryFormatter</code> work across different versions of my assembly. The actual class I want to deserialize to is exactly the same in each assembly version, but on deserialization, because the objects are serialized include the assembly name they came from, the <code>BinaryFormatter</code> is complaining that it can't find the right assembly. So I created a custom <code>SerializationBinder</code> that tells the <code>BinaryFormatter</code> to always deserialize to the current assembly version.  </p>
  
  <p>My scheme works and can deserialize objects correctly, but it doesn't work if my object is a List of T, where T was a type serialized from an older version of my assembly.  </p>
  
  <p>Is there some way to make this work with Lists and other generic types where the type parameter is a class from my assembly?</p>
  
  <pre><code>//the object i want to deserialize
  class MyObject
  {
       public string Name{get;set;}
  }
  
  //my binder class
  class MyBinder : SerializationBinder
  {
      static string assemblyToUse = typeof (MyObject).Assembly.FullName;
      public override Type BindToType(string assemblyName, string typeName)
      {
          var isMyAssembly = assemblyName.StartsWith("oldAssemblyName");
          var assemblyNameToUse = isMyAssembly ? assemblyToUse : assemblyName;
          var tn = typeName + ", " + assemblyNameToUse;
          return Type.GetType(tn);            
      }
  }
  
  
  //my deserialize method
  static object BinaryDeserialize(string input)
  {
      var arr = Convert.FromBase64String(input);
      var ms = new MemoryStream(arr);
      ms.Seek(0, SeekOrigin.Begin);
      var bf = new BinaryFormatter();
      bf.Binder = new MyBinder();
      var obj = bf.Deserialize(ms);
  
      return obj;
  }
  
  static void Test()
  {
      //this works
      //serialized(new MyObject());
      var str = ReadSerialized_MyObject();  
      var obj = BinaryDeserialize(str);
  
      //this doesn't work
      //serialized(new List&lt;MyObject&gt;());
      var str2 = ReadSerialized_List_of_MyObject(); 
      var obj = BinaryDeserialize(str2);
  }
  </code></pre>