C# list<T> zu XML

Gast #2571224
Lesenswert?

Hallo
Ich möcht bei meinem C# Programm eine List mit Objekten aus meiner 
eignenen Klasse abspeichern & wieder einlesen. Das Abspeichern 
funktioniert, beim einlesen bekomme ich jedoch folgender Fehler:

   InvalidOperationExeption wurde nicht behandelt.
   Fehler im XML-Dokument (0,0).

Was läuft falsch? habe schon x Varianten ausprobiert,jedoch ohne 
Erfolg..

1
        public static void SerializeToXML <T>(List<T> dataList, string path)
2
        {           
3
            XmlSerializer ser = new XmlSerializer(typeof(List<USBStick>));
4
            FileStream str = new FileStream(path, FileMode.Create);
5
            ser.Serialize(str,dataList);
6
            str.Close();
7
        }
8

9
        public static List<T> DeserializeToList<T>(string path)
10
        {
11
           List<T> list = new List<T>();
12
           XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<T>));
13
           FileStream str = new FileStream(path, FileMode.Create);
14
           list = (List<T>)xmlSerializer.Deserialize(str);            //<<== ERROR!
15
           return list;
16
        }

Der durch die SerializeToXML Methode erzeugtes XML Code
1
<?xml version="1.0"?>
2
<ArrayOfUSBStick xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3
  <USBStick>
4
    <name>USB1</name>
5
    <path>PfadSpeicherort1</path>
6
    <archivPath>PfadArchiv1</archivPath>
7
    <IDnumber>46</IDnumber>
8
    <syncMode>375</syncMode>
9
    <archivMode>5743</archivMode>
10
    <archivMax>347</archivMax>
11
    <date>2012-10-10T00:00:00</date>
12
  </USBStick>
13
  <USBStick>
14
    <name>USB2</name>
15
    <path>PfadSpeicherort2</path>
16
    <archivPath>PfadArchiv2</archivPath>
17
    <IDnumber>4</IDnumber>
18
    <syncMode>3</syncMode>
19
    <archivMode>543</archivMode>
20
    <archivMax>34</archivMax>
21
    <date>2011-10-10T00:00:00</date>
22
  </USBStick>
23
</ArrayOfUSBStick>

Vielen Dank!
Gast #2572381
Lesenswert?

So sollte es gehen, wenn du es generisch machen willst:
1
        public static void SerializeToXML <T>(List<T> dataList, string path)
2
        {           
3
            XmlSerializer ser = new XmlSerializer(typeof(List<T>));
4
            using(FileStream str = new FileStream(path, FileMode.Create))
5
            {
6
              ser.Serialize(str,dataList);
7
            }
8
        }
9

10
        public static List<T> DeserializeToList<T>(string path)
11
        {
12
           XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<T>));
13
           List<T> list;
14
           using(FileStream str = new FileStream(path, FileMode.Open))
15
           {
16
               list = (List<T>)xmlSerializer.Deserialize(str);
17
           }
18
           return list;
19
        }


Aber - wenn schon generisch, warum dann auf List<T> festgenagelt, warum 
nicht einfach T?

Gruß,
Sascha

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren