解决方案:
sealed class AllowAllAssemblyVersionsDeserializationBinder : System.Runtime.Serialization.SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
Type typeToDeserialize = null;
String currentAssembly = System.Reflection.Assembly.GetExecutingAssembly().FullName;
typeName = typeName.Replace("oldnamespace", "newnamespace");
assemblyName = currentAssembly;
typeToDeserialize = Type.GetType(String.Format("{0}, {1}",
typeName, assemblyName));
return typeToDeserialize;
}
}
调用:
private static String fileName = "x:xxxxxx";
public static YourType yourType = new YourType();
Stream fStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
if (!fStream.Equals(null))
{
BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器
binFormat.Binder = new AllowAllAssemblyVersionsDeserializationBinder();
yourType = (YourType)binFormat.Deserialize(fStream);
}
改代码关键在于:
typeName = typeName.Replace(“oldnamespace”, “newnamespace”);
如果不加这个可能会提示 找不到xxx程序集,这个程序集是你自己写的程序,也有可能出现
System.Runtime.Serialization.SerializationException:“无法加载进行反序列化所需的类型 yournamespace.yourtype。”