HAUPPAUGE WinTV-PVR und Media Center Edition 2005: Fernbedienung
Mrz 3

Von: Patrick Dahmen
03.03.2004 

Als ich diesem Problem zum ersten Mal begegnet bin, habe ich längere Zeit gebraucht um die ArrayList dazu zu bringen meinen eigenen Typ zu speichern.
Zunächst könnte man natürlich einfach die Funktion .ToArray() verwenden und dann das Array serialisieren. Aber wenn einem der Kopf danach steht die ArrayList zu serialisieren:
Die Lösung ist denkbar einfach. Man leitet eine eigene Klasse vom Typ ArrayList ab und fügt das XmlInclude(typeof(MyType)) Attribute hinzu.

Beispiel: 

      [XmlInclude(typeof(People))]
      public class ArrayListWithPeoplesInIt : ArrayList
      {
      }

 

Hier ein vollständiges Beispiel, wie man eine ArrayList mit einem eigenem Typ serialisieren kann: 

using System;

using System.IO;

using System.Collections;

using System.Xml.Serialization;

 

namespace SerializeArrayList

{

      ///

      /// Summary description for Class1.

      ///

      class SerializeArrayList

      {

            ///

            /// The main entry point for the application.

            ///

            [STAThread]

            static void Main(string[] args)

            {

                  new SerializeArrayList().Demo();

            }

 

 

            string FileName = "test.xml";

 

            public void Demo()

            {

                  ArrayListWithPeoplesInIt peopleList = new ArrayListWithPeoplesInIt();

                  peopleList.Add(new People("Peter", "Köln"));

                  peopleList.Add(new People("Guido", "München"));

 

                  foreach (People p in peopleList)

                        Console.WriteLine("People {0} from {1} is here!", p.Name, p.City);

 

 

                  Console.WriteLine("\nSerializing...");

 

                  XmlSerializer xmlSerializer = new XmlSerializer(typeof(ArrayListWithPeoplesInIt));

 

                  using (StreamWriter sw = new StreamWriter(FileName))

                  {

                        xmlSerializer.Serialize(sw, peopleList);

                  }

 

                  Console.WriteLine("\nNow reading back...\n");

 

                  ArrayListWithPeoplesInIt peopleListRestored;

                  using (StreamReader sr = new StreamReader(FileName))

                  {

                        peopleListRestored = (ArrayListWithPeoplesInIt) xmlSerializer.Deserialize(sr);

                  }

 

                  foreach (People p in peopleListRestored)

                        Console.WriteLine("People {0} from {1} is here again!", p.Name, p.City);

 

 

                  Console.WriteLine("Thanx!");

            }

      }

 

 

      public class People

      {

            public string Name;

            public string City;

 

            public People()

            {

            }

 

            public People(string Name, string City)

            {

                  this.Name = Name;

                  this.City = City;

            }

      }

 

 

      [XmlInclude(typeof(People))]

      public class ArrayListWithPeoplesInIt : ArrayList

      {

      }

}

 

 

 

 

?>

?>

Tags:
Nutzungsbedingungen
(c) 2010 e-llusions