Feedback

C# - 3 arten der Serialisierung bzw Deserialisierung

Veröffentlicht von am 28.05.2010
(2 Bewertungen)
Man versteht darunter eine Abbildung von Objekten auf eine externe sequenzielle Darstellungsform. Serialisierung kann für das Erreichen von Persistenz für ein Objekt verwendet werden, aber auch in verteilten Softwaresystemen spielt Serialisierung eine bedeutende Rolle.[Quelle Wikipedia]

Es gibt unter C# 3 Arten der Serialisierung:
* BinaryFormatter (Objekte werden binär abgespeichert)
* SoapFormatter (Objekte können gelesen werden)
* XMLSerializer (Objekte werden in eine XML Datei gespeichert)
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Projektmitglieder - Kompakt

Nach Teilnahme an dieser Schulung sind Ihnen die Grundlagen von ALM geläufig. Sie planen und steuern Projekte effizient mit dem Visual Studio Team Foundation Server.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Xml.Serialization;



       private ArrayList arrList = new ArrayList();   
     
//....(ArrayList füllen .....)

        /*****************
         * XmlSerializer *
         *****************/
        private void serializeXml() {
            using (FileStream fs = new FileStream("Personen.xml", FileMode.Create)) {
                XmlSerializer xmlSer = new XmlSerializer(typeof(ArrayList), new Type[] { typeof(Person) });
                xmlSer.Serialize(fs, arrList);
            }
        }

        private void deserializeXml() {
            try {
                using (FileStream fs = new FileStream("Personen.xml", FileMode.Open)) {
                    XmlSerializer xmlSer = new XmlSerializer(typeof(ArrayList), new Type[] { typeof(Person) });
                    arrList = (ArrayList)xmlSer.Deserialize(fs);
                }
            } catch (IOException ex) {
                MessageBox.Show(ex.Message);
            }

            lstAusgabe.Items.Clear();
            foreach (Person p in arrList)
                lstAusgabe.Items.Add(p);
        }

        /******************
         * Soap Formatter *
         ******************/
        private void serializeSoap() {
            using (FileStream fs = new FileStream(@"./soap.dat", FileMode.Create)) {
                SoapFormatter soaFormatter = new SoapFormatter();
                soaFormatter.Serialize(fs, arrList);
            }
        }

        private void deserializeSoap() {
            try {
                using (FileStream fs = new FileStream(@"./soap.dat", FileMode.Open)) {
                    SoapFormatter soaFormatter = new SoapFormatter();
                    arrList = (ArrayList)soaFormatter.Deserialize(fs);
                }
            } catch (IOException ex) {
                MessageBox.Show(ex.Message);
            }

            lstAusgabe.Items.Clear();
            foreach (Person p in arrList)
                lstAusgabe.Items.Add(p);
        }

        /********************
         * Binary Formatter *
         ********************/
        private void serializeBinary() {
            using (FileStream fs = new FileStream(@"./binary.dat", FileMode.Create)) {
                BinaryFormatter binFormatter = new BinaryFormatter();
                binFormatter.Serialize(fs, arrList);
            }
        }

        private void deserializeBinary() {
            try {
                using (FileStream fs = new FileStream(@"./binary.dat", FileMode.Open)) {
                    BinaryFormatter binFormatter = new BinaryFormatter();
                    arrList = (ArrayList)binFormatter.Deserialize(fs);
                }
            } catch (IOException ex) {
                MessageBox.Show(ex.Message);
            }

            lstAusgabe.Items.Clear();
            foreach (Person p in arrList)
                lstAusgabe.Items.Add(p);
        }

//Die zu serialisierende Klasse
//(Die XML-Attribute werden nur für die Xml-serialisierung gebraucht)    
    [Serializable()]
    public class Person {
        [XmlElement("Vorname",DataType="string")]
        private string vorname;
        [XmlElement("Nachname", DataType = "string")]
        private string name;
        [XmlElement("Alter", DataType = "int")]
        private int alter;
        [XmlAttribute("Land", DataType = "string")]
        private string land;

        public Person() { }

        public string Vorname {
            get { return vorname; }
            set { vorname = value; }
        }

        public string Name {
            get { return name; }
            set { name = value; }
        }

        public int Alter {
            get { return alter; }
            set { alter = value; }
        }

        public string Land {
            get { return land; }
            set { land = value; }
        }

        public override String ToString() {
            return vorname + "\t" + name + "\t" + alter + "\t" + land;
        }
    }

2 Kommentare zum Snippet

Mr. Bart Simpson schrieb am 23.06.2010:
Nicht ganz ignorieren sollte man den DataContractSerializer- der lässt sich IMHO nämlich am besten steuern.
Felix Knorr schrieb am 30.06.2010:
danke für den tipp, von dem habe ich bis jetzt noch nicht gehört, werde ihn mir aber gleich anschauen
 

Logge dich ein, um hier zu kommentieren!