Entwickler-Ecke

IO, XML und Registry - XMl-serialize speichert list<object> nicht ab


GURKE deluxe - Mo 08.08.11 11:44
Titel: XMl-serialize speichert list<object> nicht ab
Hallo,
Ich habe folgenden Code:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
public class SpeicherDatei
{
    public decimal Inflation;
    public Person[] Personen = new Person[2];

    public class Person
    {
        public decimal JahrRentenbeginn;
        public decimal JahreBisZurRente;
        public decimal Rentnerjahre;
    }

    public List<object> Ausgaben = new List<object>();
    public List<object> Einnahmen = new List<object>();
}


private void speichernToolStripMenuItem_Click(object sender, EventArgs e)
{
    SpeicherDatei SD = new SpeicherDatei();
    SD.Inflation = dInflation;
    SpeicherDatei.Person[] SDP = new SpeicherDatei.Person[2];
    SDP[0] = new SpeicherDatei.Person();
    SDP[0].JahreBisZurRente = dJahreBisZurRente;
    SDP[0].JahrRentenbeginn = dJahrRentenbeginn;
    SDP[0].Rentnerjahre = dRentnerjahre;

    SDP[1] = new SpeicherDatei.Person();
    SDP[1].JahreBisZurRente = nudGaZPJahreBisZurRente.Value;
    SDP[1].JahrRentenbeginn = nudGaZPInRenteGehenImJahr.Value;

    SD.Personen = SDP;

    foreach (TreeNode Tn in tvAusgaben.Nodes)
        SD.Ausgaben.Add(Tn.Tag);

    foreach (ListViewItem lvi in lvEinnahmen.Items)
        if (lvi.Text != "")
            SD.Einnahmen.Add(lvi.Tag);
        else
            break;

    XmlSerializer ser = new XmlSerializer(typeof(SpeicherDatei));
    //FileStream str = new FileStream(@"C:\testdatei.xml", FileMode.OpenOrCreate);
    TextWriter tw = new StreamWriter(@"C:\testdatei.xml");
    ser.Serialize(tw, SD);
    tw.Close();
}


Führe ich nun speichernToolStripMenuItem_Click aus, so wirft er folgenden Fehler auf:

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

Ich habe ein bisschen rumprobiert und herausgefunden, er wohl Probleme mit SD.Ausgaben und SD.Einnahmen hat. Leere ich diese vor dem Speichern, bzw, befühle sie erst gar nicht, so speichert er die Datei ganz normal ab und besitzt noch alle Information, wenn ich diese öffne. Die Tags die ich abspeichere sind Klassen-Objekte ähnlich der Klasse Speicherdatei.

Ich arbeite das erste Mal mit xml-Dateien und den Code zum Abspeichern habe ich im Internet gefunden...

Gruß
Julian

Moderiert von user profile iconKha: C#-Tags hinzugefügt


Kha - Mo 08.08.11 11:54

Zu der Exception wird es doch eine Inner Exception geben, oder nicht? Welche Klassen beinhalten die Lists? Die wirst du mit XmlInclude dem Serializer noch bekannt machen müssen, wobei object für mich schon etwas merkwürdig aussieht.


GURKE deluxe - Fr 02.09.11 14:59

Danke für deine Antwort. Nachdem ich die InnerException angesehen habe, war mir der Fehler klar und konnte ihn schnell beheben :)