![](/img/trans.png)
[英]How to serialize a class with one of its members holding instance of another class
[英]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.