2012-02-07 108 views
3

CustomLineCap没有应用SerializableAttribute如何序列化CustomLineCap类的实例

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

我试着切换到XML序列化,但它有一堆额外的要求,我不想用这个ESP来骗。因为它不是我的代码;它是我下载的一些开源代码。

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

我宁愿将其子类化;我只是不知道这是否也可以。

+0

你的意思是CustomLineCap?我似乎无法找到一个名为CustomEndCap的实际类。 – tyranid 2012-02-07 21:12:30

回答

1

您不能直接序列化CustomLineCap class的实例。它来自MarshalByRefObject class,虽然这不是一个指标,它不能被序列化,它几乎是总是的情况。

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

这就是说,我会建议使用adapter pattern创建捕获您希望序列化,然后CustomLineCap实例的属性揭露和序列化的包装。

这通常是你想要采取的方法,任何类有一个上下文绑定到一个特定的域,当序列化持续在该域以外,没有意义了。

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