Ich fand heraus, dass einige Klassen das [Serializable]
Attribut verwenden.
- Was ist es?
- Wann soll ich es benutzen?
- Welche Vorteile bekomme ich?
c#
.net
serialization
Kevin
quelle
quelle
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-meanAntworten:
Was ist es?
Wenn Sie ein Objekt in einer .NET Framework-Anwendung erstellen, müssen Sie nicht darüber nachdenken, wie die Daten im Speicher gespeichert werden. Weil das .Net Framework das für Sie erledigt. Wenn Sie jedoch den Inhalt eines Objekts in einer Datei speichern, ein Objekt an einen anderen Prozess senden oder über das Netzwerk übertragen möchten, müssen Sie überlegen, wie das Objekt dargestellt wird, da Sie in ein anderes Format konvertieren müssen . Diese Konvertierung wird als SERIALISIERUNG bezeichnet.
Verwendung für die Serialisierung
Durch die Serialisierung kann der Entwickler den Status eines Objekts speichern und bei Bedarf neu erstellen, um Objekte zu speichern und Daten auszutauschen. Durch die Serialisierung kann ein Entwickler Aktionen ausführen, z. B. das Senden des Objekts an eine Remoteanwendung mithilfe eines Webdienstes, das Übergeben eines Objekts von einer Domäne an eine andere, das Übergeben eines Objekts durch eine Firewall als XML-Zeichenfolge oder das Aufrechterhalten der Sicherheit oder benutzerspezifisch Informationen über Anwendungen hinweg.
Auf
SerializableAttribute
einen Typ anwenden , um anzugeben, dass Instanzen dieses Typs serialisiert werden können. Wenden Sie dasSerializableAttribute
Even an, wenn die Klasse auch dieISerializable
Schnittstelle implementiert , um den Serialisierungsprozess zu steuern.Alle öffentlichen und privaten Felder in einem Typ, die mit gekennzeichnet
SerializableAttribute
sind, werden standardmäßig serialisiert, es sei denn, der Typ implementiert dieISerializable
Schnittstelle, um den Serialisierungsprozess zu überschreiben. Der Standard-Serialisierungsprozess schließt Felder aus, die mit gekennzeichnet sindNonSerializedAttribute
. 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 wiederhergestellt werden kann, möchten Sie möglicherweiseNonSerializedAttribute
auf dieses Feld anwenden .Weitere Informationen finden Sie unter MSDN .
Bearbeiten 1
Beim Übertragen oder Speichern von Daten müssen Sie nur die erforderlichen Daten senden oder speichern. So treten weniger Übertragungsverzögerungen und Speicherprobleme auf. So können Sie beim Serialisieren unnötige Datenblöcke deaktivieren.
quelle
Einige praktische Anwendungen für das
[Serializable]
Attribut:BinaryFormatter
Klasse in System.Runtime.Serialization.Formatters.BinaryClipboard.SetData()
- nicht serialisierbaren Klassen in der Zwischenablage gespeichert werden können, kann nicht in die Zwischenablage gestellt werden.MarshalByRefObject
), serialisierbar sein.Dies sind die häufigsten Anwendungsfälle, auf die ich gestoßen bin.
quelle
Da es sich bei der ursprünglichen Frage um das SerializableAttribute handelte, sollte beachtet werden, dass dieses Attribut nur bei Verwendung von BinaryFormatter oder SoapFormatter gilt.
Es ist etwas verwirrend, es sei denn, Sie achten wirklich auf die Details, wann Sie es verwenden und was sein eigentlicher Zweck ist.
Es hat NICHTS mit XML- oder JSON-Serialisierung zu tun.
Mit dem SerializableAttribute 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, markieren Sie Ihre Klasse nicht als [serialisierbar]. XML- und JSON-Serialisierer sind sich ihrer Existenz nicht einmal bewusst.
quelle
Serializable
und ohne, wenn das Attribut entfernt wurde. So ist eine Störung möglich.Wie Serialisierung funktioniert
Diese Abbildung zeigt den gesamten Serialisierungsprozess.
Das Objekt wird in einen Stream serialisiert, der nicht nur die Daten enthält, sondern auch Informationen über den Objekttyp, wie z. B. Version, Kultur und Assemblyname. Von diesem Stream kann es in einer Datenbank, einer Datei oder einem Speicher gespeichert werden.
Details in msdn.
quelle
Hier ist ein kurzes Beispiel für die Funktionsweise der Serialisierung. Ich habe auch etwas darüber gelernt und fand zwei Links nützlich. Was Serialisierung ist und wie es in .NET getan werden .
Ein Beispielprogramm zur Erläuterung der Serialisierung
Wenn Sie nicht verstehen , das obige Programm ein sehr einfaches Programm , mit Erklärung gegeben ist hier .
quelle
Serialisierung
Bei der Serialisierung wird ein Objekt oder eine Reihe von Objektgraphen in einen Stream konvertiert. Bei der binären Serialisierung handelt es sich um ein Byte-Array
Verwendung der Serialisierung
Im Folgenden finden Sie einige nützliche benutzerdefinierte Attribute, die während der Serialisierung eines Objekts verwendet werden
[Serializable] -> Wird verwendet, wenn wir das serialisierbare Objekt markieren. [NonSerialized] -> Wird verwendet, wenn das Feld eines Objekts nicht serialisiert werden soll. [OnSerializing] -> Wird verwendet, wenn beim Serialisieren eines Objekts eine Aktion ausgeführt werden soll. [OnSerialized] -> Wird verwendet, wenn nach dem Serialisieren eines Objekts in den Stream eine Aktion ausgeführt werden soll.
Unten sehen Sie ein Beispiel für die Serialisierung
Hier ist der aufrufende Code
quelle