如何序列化CustomLineCap类的实例

时间:2012-02-07 16:58:34

标签: c# .net vb.net serializable binaryformatter

CustomLineCap没有应用SerializableAttribute

我想将此类型的属性添加到当前使用BinaryFormatter进行序列化/反序列化的对象图中。

我尝试过切换到XML序列化,但它有一堆额外的要求,我不想愚弄那个esp。因为这不是我的代码;这是我下载的一些开源。

如果有办法让BinaryFormatter忽略该属性,那可能会有效。

我宁愿继承它;我只是不知道这是否会奏效。

1 个答案:

答案 0 :(得分:1)

您无法直接序列化CustomLineCap class的实例。它来自MarshalByRefObject class,虽然这并不是无法序列化的指标,但它几乎总是的情况。

原因是MarshalByRefObject类通常指示从中派生的对象仅在实例所在的应用程序域中具有上下文。在这种情况下,CustomLineCap实例是GDI object,它在其所处的过程中只有任何意义(它明确地绑定到句柄)。

那就是说,我建议使用adapter pattern创建一个包装器来捕获您希望序列化的CustomLineCap实例的属性,然后公开并序列化 >

这通常是您希望与任何类一起使用的方法,该类具有与特定域绑定的上下文,该特定域在序列化后保留在该域之外,不会生成感觉不再。

请注意,子类化在这种情况下也不起作用,因为将SerializableAttribute应用于您的子类意味着所有字段(甚至是您无权访问的私有字段)都将被序列化,包括任何只在其创建的应用程序域中具有上下文的句柄。