繁体   English   中英

如何序列化CustomLineCap类的实例

[英]How to serialize an instance of the CustomLineCap class

CustomLineCap没有应用SerializableAttribute

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

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

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

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

您无法直接序列化CustomLineCap的实例。 它派生自MarshalByRefObject ,虽然这不是一个无法序列化的指标,但几乎总是如此。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM