异常问题:改变类的命名空间后不能用的BinaryFormatter反序列化。
详细异常:{"[A] XXXX Config 无法强制转换为 [B] XXXX Config。类型 A 源自“Viewer, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null”(在上下文“Default”中的“AAAAAAAAAAA”位置处)。类型 B 源自“SetingConfig, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”(在上下文“Default”中的“BBBBBBBBBBB”位置处)。"}
解决方法:添加“USerializationBinder ”类,重载BindToType方法。
public class USerializationBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
Assembly ass = Assembly.GetExecutingAssembly();
return ass.GetType(typeName);
}
}
引用示例:
public void SaveTo(string fileName)
{
using (MemoryStream ms = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Binder = new USerializationBinder();
formatter.Serialize(ms, this);
File.WriteAllBytes(fileName, ms.ToArray());
}
}
public static DSConfig LoadFromFile(string fileName)
{
try
{
if (!File.Exists(fileName))
return null;
else
{
byte[] buff = File.ReadAllBytes(fileName);
using (MemoryStream ms = new MemoryStream(buff))
{
IFormatter formatter = new BinaryFormatter();
formatter.Binder = new USerializationBinder();
return (Config)formatter.Deserialize(ms);
}
}
}
catch (Exception ex)
{
}
return null;
}