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...
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.
Du musst der Klasse auch das Attribut Serializable() mitgeben.
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.
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?
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.
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.
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.ä.)
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
hat jemand eine idee?
komme einfach nicht weiter. hab gedacht ein ganzes objekt in ein xml-dokument zu schreiben wäre um einiges einfacher...
So könnte es klappen:
public class EintraegeExport
{
[XmlArrayItem(Type=typeof(TypDerElemente))]
ArrayList Eintraege = new ArrayList();
// ...
}
mit TypderElemente meinst du den Typ der Elemente die in der Arraylist drinnen sind, oder?
wenn ja,dann klappts leider auch nicht.