3

CustomLineCap 没有SerializableAttribute应用它。

我想将这种类型的属性添加到当前正在使用BinaryFormatter.

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

如果有办法BinaryFormatter忽略该属性,那可能会起作用。

我宁愿子类化它;我只是不知道这是否会奏效。

4

1 回答 1

1

您将无法直接序列化CustomLineCap该类的实例。它派生自MarshalByRefObjectclass,虽然这并不表示它不能被序列化,但几乎总是如此。

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

也就是说,我建议使用适配器模式来创建一个包装器,该包装器捕获CustomLineCap您希望序列化的实例的属性,然后公开和序列化.

这通常是您希望对具有与特定域相关联的上下文的任何类采用的方法,当序列化以在该域之外持久化时,不再有意义。

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

于 2012-02-07T21:11:30.600 回答