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?

17voto

Sheo Dayal Singh Punkte 1405

Serialisierung

Serialisierung ist der Prozess der Umwandlung eines Objekts oder einer Reihe von Objekten in einen Datenstrom, im Falle der binären Serialisierung in ein Byte-Array

Verwendungszwecke der Serialisierung

  1. Speichern des Zustands eines Objekts in einer Datei, einer Datenbank usw., um es später zu verwenden.
  2. Senden eines Objekts von einem Prozess an einen anderen (App Domain) auf demselben Rechner und Senden über Kabel an einen Prozess, der auf einem anderen Rechner läuft.
  3. So erstellen Sie einen Klon des Originalobjekts als Backup, während Sie am Hauptobjekt arbeiten.
  4. Eine Reihe von Objekten kann einfach in die Zwischenablage des Systems kopiert und dann in dieselbe oder eine andere Anwendung eingefügt werden

Im Folgenden sind einige nützliche benutzerdefinierte Attribute aufgeführt, die während der Serialisierung eines Objekts verwendet werden

[Serializable] -> Es wird verwendet, wenn wir die Serialisierbarkeit eines Objekts markieren. [NonSerialized] -> Sie wird verwendet, wenn das Feld eines Objekts nicht serialisiert werden soll. [OnSerializing] -> Sie wird verwendet, wenn bei der Serialisierung eines Objekts eine Aktion durchgeführt werden soll. [OnSerialized] -> Es wird verwendet, wenn wir eine Aktion durchführen wollen, nachdem ein Objekt in den Stream serialisiert wurde.

Nachfolgend ein Beispiel für die Serialisierung

[Serializable]
    internal class DemoForSerializable
    {
        internal string Fname = string.Empty;
        internal string Lname = string.Empty;

        internal Stream SerializeToMS(DemoForSerializable demo)
        {
            DemoForSerializable objSer = new DemoForSerializable();
            MemoryStream ms = new MemoryStream();
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(ms, objSer);
            return ms;
        }

        [OnSerializing]
        private void OnSerializing(StreamingContext context) {
            Fname = "sheo";
            Lname = "Dayal";
        }
        [OnSerialized]
        private void OnSerialized(StreamingContext context)
        {
       // Do some work after serialized object
        }

    }

Hier ist der aufrufende Code

class Program
    {
        string fname = string.Empty;
        string Lname = string.Empty; 

       static void Main(string[] args)
        {
            DemoForSerializable demo = new DemoForSerializable();

            Stream ms = demo.SerializeToMS(demo);
            ms.Position = 0;

            DemoForSerializable demo1 = new BinaryFormatter().Deserialize(ms) as DemoForSerializable;

            Console.WriteLine(demo1.Fname);
            Console.WriteLine(demo1.Lname);
            Console.ReadLine();
        }

    }

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