Laden...

Objekte in XML schreiben

Erstellt von chrisi1002 vor 18 Jahren Letzter Beitrag vor 18 Jahren 9.766 Views
C
chrisi1002 Themenstarter:in
19 Beiträge seit 2005
vor 18 Jahren
Objekte in XML schreiben

Hallo!

hab schon im Internet und Forum herumgesucht, bin jedoch noch nicht schlauer geworden.

Habe in einer ArrayList Objekte einer selbstgeschriebenen Klasse drinnen und diese Arraylist sollte nun in eine XML-Datei geschreiben werden. D.h. Alle Objekte direkt in die Datei schreiben ohne jedes einzelne Attribut händisch hineinzuschreiben.

XmlSerializer xmlSer = new XmlSerializer(Eintraege.GetType);

das funktioniert nicht...

S
8.746 Beiträge seit 2005
vor 18 Jahren

Nur einzelne Objekte können serialisiert werden. Muss dir also ein extra Objekt machen, welches diese Objekte in einer ArrayList hält. Das kannst du dann serialisieren.

A
196 Beiträge seit 2005
vor 18 Jahren

Du musst der Klasse auch das Attribut Serializable() mitgeben.

S
8.746 Beiträge seit 2005
vor 18 Jahren

Das Serializable-Attribut ist für Xml-Serialisierung nicht nötig, sonder nur für SOAP oder Binär-Serialisierung, also im Zusammenhang mit Remoting und WebServices.

C
chrisi1002 Themenstarter:in
19 Beiträge seit 2005
vor 18 Jahren

ich möchte eh nicht die ganze arraylist, sondern jedes einzelne objekt serialisieren.
nur geht das auch nicht.

also

XmlSerializer xmlSer = new XmlSerializer(TagEintrag);

TagEintrag ist die selbstgeschriebene Klasse. was muss ich mit dieser klasse noch machen damit ich sie serialisieren kann?

S
8.746 Beiträge seit 2005
vor 18 Jahren

Hast du wirklich nur eine Zeile Code? Das reicht tatsächlich nicht zur Serialisierung aus. Bitte mehr Infos. "Das geht nicht" hat ein Gehalt wie ein Sack Schrauben.

830 Beiträge seit 2005
vor 18 Jahren

Hallo chrisi1002,

Original von chrisi1002
D.h. Alle Objekte direkt in die Datei schreiben ohne jedes einzelne Attribut händisch hineinzuschreiben.

XmlSerializer xmlSer = new XmlSerializer(Eintraege.GetType);  

das funktioniert nicht...

Das wird wohl nicht ganz hinhauen. Wenn du wirklich mit der XML-Serialisierung arbeiten willst, musst du beachten, dass "nur" Properties, also Attribute mit Accessor vom XML-Serialiser serialisiert werden. Ausserdem muss dein Objekt serialisierbar sein, d.h. manche Eigenschaften lassen sich nicht ohne weiteres serialisieren, zumindest nicht mit XML. Der BinaryFormatter kann eigentlich alles serialisieren, da dieser den internen Zustand eines Objektes binär abspeichert. Der XML-Serialiser hingegen speichert "nur" die Properties. D.h. bei der Deserserialisierung ruft der Deserialisierer den parameterlosen Konstruktor auf und setzt die Properties entsprechend, damit der öffentliche Zustand eines Objektes wiederhergestellt ist.

Gruss
Friedel

Ohne Ziel ist auch der Weg egal.

C
chrisi1002 Themenstarter:in
19 Beiträge seit 2005
vor 18 Jahren

ich muss nicht unbedingt den XmlSerializer nehmen...ich will nur ein ganzes objekt einer klasse einfach in eine xml-datei schreiben. und da dachte ich das der Serializer das einfachste ist.

meine Klasse "TagEintrag" hat für die Member die ich serialisieren will GET-Methoden aber sonst keine weiteren Eigenschaften zur Serialisierung (Serializable-Attribut o.ä.)

C
chrisi1002 Themenstarter:in
19 Beiträge seit 2005
vor 18 Jahren

so, habe mir jetzt eine klasse geschrieben in der ich die arraylist speichere (die arraylist wiederum enthält objekte der Klasse Tageintrag)


public class EintraegeExport
    {
        ArrayList Eintraege = new ArrayList();

        public EintraegeExport()
        {
            Eintraege.Clear();
        }

        public EintraegeExport(ArrayList Liste)
        {
            Eintraege =  Liste;
        }

        public ArrayList Liste
        {
            get{
                return Eintraege;
            }
            set{
                Eintraege = value;
            }
        }

    }

jedoch bekomme ich dann beim Serialisieren eine Exception:


XmlSerializer xs = new XmlSerializer(typeof(EintraegeExport));
StreamWriter sr = new StreamWriter(new FileStream(sfd.FileName,FileMode.Create));
xs.Serialize(sr, ex);

"Beim Generieren des XML-Dokuments ist ein Fehler aufgetreten."

Das hilft mir natürlich nicht viel weiter

C
chrisi1002 Themenstarter:in
19 Beiträge seit 2005
vor 18 Jahren

hat jemand eine idee?

komme einfach nicht weiter. hab gedacht ein ganzes objekt in ein xml-dokument zu schreiben wäre um einiges einfacher...

S
8.746 Beiträge seit 2005
vor 18 Jahren

So könnte es klappen:


public class EintraegeExport
    {
        [XmlArrayItem(Type=typeof(TypDerElemente))] 
        ArrayList Eintraege = new ArrayList();

       // ...

    }
 
C
chrisi1002 Themenstarter:in
19 Beiträge seit 2005
vor 18 Jahren

mit TypderElemente meinst du den Typ der Elemente die in der Arraylist drinnen sind, oder?

wenn ja,dann klappts leider auch nicht.