Feedback

C# - 3 arten der Serialisierung bzw Deserialisierung

Veröffentlicht von am 5/28/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)
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 6/23/2010:
Nicht ganz ignorieren sollte man den DataContractSerializer- der lässt sich IMHO nämlich am besten steuern.
Felix Knorr schrieb am 6/30/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!