3 Stimmen

Wie serialisiere ich ein Pen in C#?

Ich habe eine Shape-Klasse, die enthält

public Pen outlinePen;  

Was ich versuche zu tun ist, eine Liste von Shape zu serialisieren, aber alles, was ich habe, ist Type

'System.Drawing.Pen' in Assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' ist nicht als serialisierbar markiert.

Wenn ich dieses Feld als [field: NonSerialized()] markiere, dann kann ich meine geladenen Objekte nicht verwenden, da outlinePen null ist.

Gibt es andere Möglichkeiten, System.Drawing.Pen zu serialisieren?

3voto

Tigran Punkte 60618

Sie sollten nur die Daten serialisieren, die Sie interessieren. Pen ist ein grafisches Objekt, daher ist es meiner Meinung nach keine gute Idee, es zu speichern, auch wenn es möglich wäre.

Zum Beispiel in Ihrem Fall können Sie PenColor, PenWidth und PenStyle als PenDataObject speichern, das eine Art Pen Leichtgewichtsobjekt ist, das speziell erstellt wurde, um Pen Daten zu speichern.

Hoffe, das hilft.

1voto

Abbas Punkte 6570

Pen ist in .NET intern als nicht-serialisierbar markiert und es ist versiegelt, so dass man es auch nicht ableiten und serialisieren kann. Wenn Sie Grafiken serialisieren müssen, können Sie sich die Metafile-Klasse anschauen, die speziell für die Speicherung von Grafiken und Zeichenobjekten konzipiert ist.

0voto

g1ga Punkte 323

Ich würde einen anderen Ansatz empfehlen, der die Ausführung einer Logik beinhaltet, wenn das übergeordnete Objekt deserialisiert wird.

[NonSerialized]
private Pen _penToUse;

[OnDeserialized()]
internal void Reinitialize(StreamingContext context)
{
    SwitchPen(); // jetzt können wir den Stift wiederherstellen, der einfache Weg wäre,
                 // ihn in einer statischen Klasse im Bereich zu speichern
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X