如何序列化 CustomLineCap 类的实例

Posted

技术标签:

【中文标题】如何序列化 CustomLineCap 类的实例【英文标题】:How to serialize an instance of the CustomLineCap class 【发布时间】:2012-02-29 03:04:27 【问题描述】:

CustomLineCap 没有应用SerializableAttribute

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

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

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

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

【问题讨论】:

你的意思是CustomLineCap吗?我似乎找不到一个名为 CustomEndCap 的实际类。 【参考方案1】:

您将无法直接序列化CustomLineCap class 的实例。它源自MarshalByRefObject class,虽然这并不表示它无法被序列化,但几乎总是如此。

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

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

这通常是您希望对具有与特定域相关联的上下文的 any 类采取的方法,当序列化以在该域之外持久化时,不会使感觉没有了。

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

【讨论】:

以上是关于如何序列化 CustomLineCap 类的实例的主要内容,如果未能解决你的问题,请参考以下文章

序列化派生自DynamicObject类的类的实例

如何序列化可能只有唯一实例的类

平衡二叉树实例--判断输入后序序列是否为平衡二叉树

平衡二叉树实例--判断输入后序序列是否为平衡二叉树

Gson 没有正确序列化 LocalDate

为啥类的一个不可序列化的静态字段在实例被序列化时会抛出 NotSerializableException?