如何在C#中序列化Pen?

3

我有一个形状类,其中包含:

public Pen outlinePen;  

我尝试序列化形状列表,但我只有一个Type。如果我将此字段标记为[field: NonSerialized()],则无法使用我的加载对象,因为outlinePen为空。是否有其他方法可以序列化System.Drawing.Pen?但是,程序中的'System.Drawing.Pen'在程序集'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'中未被标记为可序列化。

如果你想序列化它,为什么要将它标记为“NonSerializable”? - Oded
3个回答

3
你应该只序列化你感兴趣的数据。 Pen 是一个图形对象,所以即使可能,我认为把它存储起来也不是一个好主意。
例如,在你的情况下,你可以像 PenDataObject 一样存储 PenColorPenWidthPenStyle,这是一种特别创建用于存储 Pen 数据的轻量级对象。
希望这能帮到你。

谢谢,我正在考虑这个问题,但是我试图避免它,因为我在课堂上使用钢笔来画图。现在我已经按照你写的做了。 - mindmaster

1

Pen 在 .NET 中被标记为不可序列化的,并且它是密封的,因此您无法对其进行子类化和序列化。如果您需要序列化图形,可以查看 Metafile 类,该类专门设计用于存储图形和绘图对象。


0
我建议采用不同的方法,涉及在反序列化父对象时执行一些逻辑。
[NonSerialized]
private Pen _penToUse;

[OnDeserialized()]
internal void Reinitialize(StreamingContext context)
{
    SwitchPen(); //now we can restore the Pen, the easy way would be 
                 //to store it in a static class in the domain
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接