Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 3
  • 1.8K
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 2

W celu zapisania kolekcji obiektów w pliku binarnym najlepiej skorzystać z gotowego mechanizmu serializacji danych.

Serializacja danych polega na zapisie stanu obiektów do strumienia danych, na przykład w postaci pliku binarnego lub tekstowego.
Procesem odwrotnym jest deserializacja, czyli odtworzenie obiektów na podstawie strumienia danych.

Przykład:

Otwieramy strumień do zapisu, w naszym przypadku plik. Tworzymy instancję BinaryFormatter i serializujemy dane. Po zakończonej operacji zamykamy strumień.

        // open a stream for writing. 
        // In this case, use a file stream.
        FileStream fs = new FileStream("DataFile.dat", FileMode.Create);

        // Construct a BinaryFormatter and use it to serialize the data to the stream.
        BinaryFormatter formatter = new BinaryFormatter();
        try 
        {
            formatter.Serialize(fs, addresses);
        }
        catch (SerializationException e) 
        {
            Console.WriteLine("Failed to serialize. Reason: " + e.Message);
            throw;
        }
        finally 
        {
            fs.Close();
        }


Następnie tak zapisany plik możemy wczytać i odtworzyć listę obiektów za pomocą deserializacji:

  // Open the file containing the data that you want to deserialize.
        FileStream fs = new FileStream("DataFile.dat", FileMode.Open);
        try 
        {
            BinaryFormatter formatter = new BinaryFormatter();

            // Deserialize the hashtable from the file and 
            // assign the reference to the local variable.
            addresses = (Hashtable) formatter.Deserialize(fs);
        }
        catch (SerializationException e) 
        {
            Console.WriteLine("Failed to deserialize. Reason: " + e.Message);
            throw;
        }
        finally 
        {
            fs.Close();
        }


W przypadku, gdy nie wystarcza nam standardowy zapis i potrzebujemy większej kontroli nad zapisem, powinniśmy zaimplementować metodę GetObjectData z interfejsu ISerializable (http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.getobjectdata(v=vs.100).aspx).

Oprócz serializacji pliku binarnego istnieje możliwość serializacji do pliku tekstowego w formacie XML lub JSON, które przydatne są zwłaszcza przy wymianie danych.




  • Odpowiedział
  • @ | 16.07.2013
  • TRENER ALTKOM AKADEMII