这本书《CLR Via C#》介绍了一种通过二进制序列化来克隆对象的简单方法。
在创建BinaryFormatter时,它指定了StreamingContextStates.Clone,如下所示:
在创建BinaryFormatter时,它指定了StreamingContextStates.Clone,如下所示:
StreamingContextStates.Clone
。var formatter = new BinaryFormatter
{
Context = new StreamingContext(StreamingContextStates.Clone)
};
StreamingContextStates.Clone
的文档说它
指定正在克隆对象图。用户可以假设克隆的图将继续存在于同一进程中,并且可以安全地访问对未托管资源的句柄或其他引用。
好吧 - 但我不知道这实际上意味着什么。这到底如何改变BinaryFormatter
的行为?有人能列出使用此标志的任何具体影响吗?
BinaryFormatter
。虽然它有一些方便之处,但我见过太多的人因此而遭受太多的痛苦...事实上,BinaryFormatter
中的问题是我几年前深度介入序列化的原因之一。 - Marc GravellISerializable.GetObjectData(...)
中被重新暴露,因此从技术上讲,任何实现都有可能根据StreamingContextStates
的值选择不同的操作。我不知道有多少个实现这样做了,如果有的话。 - Marc Gravell