2011-12-24 18 views
3

私はShapeクラスのウィッヒがC#でペンをシリアライズするには?

public Pen outlinePen; 

私は何をしようとすると、形状のリストをシリアライズすることですが、私が持っているすべてのType

総会で「System.Drawing.Pen」 'であるが含まれていSystem.Drawing、Version = 4.0.0.0、 Culture =ニュートラル、PublicKeyToken = b03f5f7f11d50a3a 'は シリアライズ可能とマークされていません。

このフィールドを[field: NonSerialized()]とマークすると、outlinePenがnullであるため、ロードされたオブジェクトを使用できません。

System.Drawing.Penをシリアル化する他の方法はありますか?

+0

シリアル化するには、なぜ非シリアル化とマークするのですか? – Oded

答えて

3

興味のあるデータのみをシリアル化する必要があります。 Penはグラフィックオブジェクトなので、たとえ可能であっても、それを保存するのは良い考えではありません。例えば

あなたのケースでは、あなたは特別Penデータを格納するために作成Pen lighweghtオブジェクトの一種であるPenDataObject、同じようPenColorPenWidthPenStyleを保存することができます。

これが役に立ちます。

+0

ありがとう、私はそれについて考えていたが、私はそれを避けようとした。私はそれを描画するために授業の中でペンを使うからだ。今あなたが書いたように私はやった。 – mindmaster

1

Penは、.NETによって内部的に非直列化可能とマークされており、シールされているためサブクラス化もシリアル化もできません。グラフィックスをシリアル化する必要がある場合は、グラフィックと描画オブジェクトを格納するように特別に設計されたMetafile classを調べることができます。

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 
} 
関連する問題