392 Stimmen

Was ist [Serializable] und wann sollte ich es verwenden?

Ich habe herausgefunden, dass einige Klassen die [Serializable] Attribut.

  • Was ist das?
  • Wann sollte ich es verwenden?
  • Welche Art von Leistungen erhalte ich?

431voto

CharithJ Punkte 44196

Was ist das?

Wenn Sie ein Objekt in einer .Net-Framework-Anwendung erstellen, müssen Sie sich keine Gedanken darüber machen, wie die Daten im Speicher abgelegt werden. Denn das .Net Framework erledigt das für Sie. Wenn Sie jedoch den Inhalt eines Objekts in einer Datei speichern, ein Objekt an einen anderen Prozess senden oder es über das Netzwerk übertragen wollen, müssen Sie sich Gedanken darüber machen, wie das Objekt dargestellt wird, da Sie es in ein anderes Format konvertieren müssen. Diese Konvertierung wird SERIALISIERUNG genannt.

Verwendungszwecke für die Serialisierung

Die Serialisierung ermöglicht es dem Entwickler, den Zustand eines Objekts zu speichern und es bei Bedarf wiederherzustellen, was sowohl die Speicherung von Objekten als auch den Datenaustausch ermöglicht. Durch die Serialisierung kann ein Entwickler Aktionen wie das Senden des Objekts an eine Remote-Anwendung mittels eines Webdienstes, die Weitergabe eines Objekts von einer Domäne an eine andere, die Weitergabe eines Objekts durch eine Firewall als XML-String oder die Aufrechterhaltung von Sicherheits- oder benutzerspezifischen Informationen über Anwendungen hinweg durchführen.

Bewerbung SerializableAttribute zu einem Typ, um anzuzeigen, dass Instanzen dieses Typs serialisiert werden können. Wenden Sie die SerializableAttribute auch wenn die Klasse auch die ISerializable Schnittstelle, um den Serialisierungsprozess zu steuern.

Alle öffentlichen und privaten Felder eines Typs, die mit dem Symbol SerializableAttribute werden standardmäßig serialisiert, es sei denn, der Typ implementiert die ISerializable Schnittstelle, um den Serialisierungsprozess außer Kraft zu setzen. Der Standard-Serialisierungsprozess schließt Felder aus, die mit NonSerializedAttribute . Wenn ein Feld eines serialisierbaren Typs einen Zeiger, ein Handle oder eine andere Datenstruktur enthält, die für eine bestimmte Umgebung spezifisch ist und in einer anderen Umgebung nicht sinnvoll rekonstituiert werden kann, dann sollten Sie möglicherweise NonSerializedAttribute zu diesem Feld.

Siehe MSDN für weitere Einzelheiten.

Bearbeiten 1

Jeder Grund, etwas nicht als serialisierbar zu markieren

Beim Übertragen oder Speichern von Daten müssen Sie nur die erforderlichen Daten senden oder speichern. So gibt es weniger Übertragungsverzögerungen und Speicherprobleme. So können Sie bei der Serialisierung unnötige Datenpakete ausschließen.

128voto

BLaminack Punkte 893

Da sich die ursprüngliche Frage auf das SerializableAttribut bezog, ist zu beachten, dass dieses Attribut nur bei Verwendung des BinaryFormatter oder SoapFormatter gilt.

Es ist etwas verwirrend, wenn man sich nicht wirklich mit den Details beschäftigt, wann man es verwenden sollte und was sein eigentlicher Zweck ist.

Es hat NICHTS mit XML- oder JSON-Serialisierung zu tun.

Zusammen mit dem SerializableAttribut werden die ISerializable-Schnittstelle und die SerializationInfo-Klasse verwendet. Diese werden auch nur mit dem BinaryFormatter oder SoapFormatter verwendet.

Wenn Sie nicht beabsichtigen, Ihre Klasse mit Binary oder Soap zu serialisieren, brauchen Sie Ihre Klasse nicht als [Serializable] zu kennzeichnen. XML- und JSON-Serialisierer sind sich ihrer Existenz nicht einmal bewusst.

50voto

Bradley Smith Punkte 13023

Einige praktische Anwendungen für das [Serializable] Attribut:

  • Speichern des Objektzustands durch binäre Serialisierung; Sie können sehr einfach ganze Objektinstanzen in Ihrer Anwendung in einer Datei oder einem Netzwerkstrom "speichern" und sie dann durch Deserialisierung wiederherstellen - sehen Sie sich die BinaryFormatter Klasse in System.Runtime.Serialization.Formatters.Binary
  • Schreiben von Klassen, deren Objektinstanzen in der Zwischenablage gespeichert werden können, mit Clipboard.SetData() - Nicht-serialisierbare Klassen können nicht in die Zwischenablage gelegt werden.
  • Schreiben von Klassen, die mit .NET Remoting kompatibel sind; im Allgemeinen kann jede Klasseninstanz, die Sie zwischen Anwendungsdomänen übergeben (außer denen, die von MarshalByRefObject ) muss serialisierbar sein.

Dies sind die häufigsten Anwendungsfälle, die mir begegnet sind.

36voto

Mahbubur Rahman Punkte 4641

Unter Serialisierung versteht man die Umwandlung eines Objekts in einen Strom von Bytes, um das Objekt zu speichern oder es an einen Speicher, eine Datenbank oder eine Datei zu übertragen.

Wie die Serialisierung funktioniert

Diese Illustration zeigt den gesamten Prozess der Serialisierung:

enter image description here

Das Objekt wird in einen Stream serialisiert, der die Daten enthält. Der Stream kann auch Informationen über den Objekttyp enthalten, z. B. die Version, die Kultur und den Assembly-Namen. Von diesem Stream aus kann das Objekt in einer Datenbank, einer Datei oder im Speicher abgelegt werden.

Einzelheiten in Microsoft Dokumente .

19voto

Akshay Punkte 496

Hier ein kurzes Beispiel, wie die Serialisierung funktioniert. Ich war auch über das gleiche lernen und ich fand zwei Links nützlich. Was Serialisierung ist und wie sie in .NET durchgeführt werden kann .

Ein Beispielprogramm zur Erläuterung der Serialisierung

Wenn Sie das obige Programm nicht verstehen, finden Sie hier ein viel einfacheres Programm mit Erklärung aquí .

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