public static object DeepClone(object original)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Context = new StreamingContext(StreamingContextStates.Clone);
formatter.Serialize(ms, original);
ms.Position = 0;
return formatter.Deserialize(ms);
}
}
为了明确反序列化时的目的,可以指定StreamingContext.Clone,序列化代码可认定是由同一个进程对数据进行反序列化,所以可以安全的访问句柄或其他非托管资源。