c# - StreamingContextStates.Clone 到底做了什么?

标签 c# serialization binaryformatter

CLR Via C# 一书介绍了一种通过二进制序列化克隆对象的简单方法。

它在创建 BinaryFormatter 时指定 StreamingContextStates.Clone,如下所示:

var formatter = new BinaryFormatter
{
    Context = new StreamingContext(StreamingContextStates.Clone)
};

The documentation for StreamingContextStates.Clone说是

Specifies that the object graph is being cloned. Users can assume that the cloned graph will continue to exist within the same process and be safe to access handles or other references to unmanaged resources.

很公平 - 但我真的不知道这到底意味着什么。这实际上以何种方式改变了 BinaryFormatter 的行为?任何人都可以列出使用此标志的任何具体效果吗?

最佳答案

序列化是这里的主题。
MS 提供了一个“抽象的”微型框架来允许对象的序列化。
二进制格式化程序是该微型框架概念的具体实现。

开发人员可以选择使用该框架概念来创建他自己的自定义格式化程序 - 或 -
MS本身在创建mini-framework时就想到了进一步实现序列化。

因此他们提供了这些标志作为框架的一部分。

回答您的具体问题:这些标志不会对二进制格式化程序产生任何影响,因为它已经实现为一种工具(如果您愿意)来跟踪对象图并将其简单地转换为原始数据字节。
如果您创建自己的序列化程序,例如可以将对象保存到数据库或文件或共享内存或其他任何东西 - 您会希望使用您的序列化程序的用户指定相应的标志。

除非我完全误解了自 2003 年以来的 MS 开发人员.. :)(这是可能的!)

关于c# - StreamingContextStates.Clone 到底做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17156194/

相关文章:

python - 在 Python 中保存数据,然后在 C++ 中读取

c# - 无法将 XML 反序列化为 C# 对象,我做错了什么?

c# - 为什么 BinaryFormatter 试图在可序列化类上序列化事件?

c# - ItemsControl 中 WPF 中的可拖动对象?

c# - Entity Framework 4.1 中带有 TransactionScope 的多个 dbcontext 的 SaveChanges()

c# - 将 JSON 转换为 C# 类型

ASP.NET VNext 类库 System.Runtime.Serialization

c# - 二进制对象图序列化

azure - 使用 MemoryStream 反序列化大块 blob

c# - 如果未选中 gridview 复选框,则不显示确认消息框