In manchen Fällen kann es sinnvoll sein Listen und deren Inhalt zu speichern.
In meinem Fall wurde die Liste mit Objekten einer eigens erstellen Klasse gefüllt, dadurch ist es sehr schwierig diese Liste mit dem XmlSerializer zu serialisieren/speichern.

Für solche Fälle eignet sich der BinaryFormatter

Um die Daten zu serialisieren benötigen wir folgende Namespaces:

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization; //Kann fürdas Exception-Handling genutzt werden
//bspw. SerializationException

Zusätzlich benötigt man natürlich auch das zu sichernde Objekt – in meinem Fall eine Liste mit Objekten vom Typ „Receiver“ mit Namen receiverList

List<Receiver> receiverList = new List<Receiver>();

Meine Receiver-Klasse sieht wie folgt aus:

    [Serializable()]
    public class Receiver
    {
        public string Name { get; set; }
        public string MACAddress { get; set; }
        public IPAddress IP { get; set; }
        public string Info { get; set; }

        public Receiver(string pName, string pMAC, string pIPAddress, string pInfo)
        {
            Name = pName;
            MACAddress = pMAC;
            if (pIPAddress != null && pIPAddress != "")
            {
                IP = IPAddress.Parse(pIPAddress);
            }
            Info = pInfo;
        }
    }

Und schon haben wir den ersten wichtigen Punkt: Die Klasse muss als serialisierbar(engl. Serializable) gekennzeichnet sein, daher muss das Serializable-Attribut [Serializable()] über dem Header der Klasse angebracht werden, eine paramterlosen Konstruktor, wie bei XmlSerializer benötigt man nicht

Nun zum eigentlichen Speichern der Liste, man könnte natürlich auch jedes Objekt einzeln speichern, jedoch halte ich das für aufwendiger und man benötigt die genaue Anzahl der zu serialisierenden Objekte. Deshalb speichern wir die Collection selbst und schreiben sie komplett in einen FileStream (Datenstrom).

        private void SaveReceiverList()
        {
            FileStream stream;
            stream = new FileStream(@"receiverList.dat", FileMode.Create);
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, receiverList);
            stream.Close();
        }

Zum Laden der Liste benutzen wir folgenden Code:

        private void LoadReceiverList()
        {
            FileStream fs = new FileStream(@"receiverList.dat", FileMode.Open); ;
            BinaryFormatter formatter = new BinaryFormatter();
            receiverList = (List<Receiver>)formatter.Deserialize(fs);
        }

Bisher wurde, zum Nutzen der Übersicht, kein Exception-Handling eingebaut, dies sollte man aber unbedingt nachholen. Gerade beim Lesen und Schreiben von Dateien kommt es immer mal wieder zu Ausnahmen (bspw. UnauthorizedAccessException)