Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Serializacja i Deserializacja w C#


Rekomendowane odpowiedzi

Opublikowano

Serializacja i deserializacja binarna w C#

 

Zapewne wielu z was zastanawia się w jaki sposób wygodnie zapisać dane z danej klasy w której mogą znajdować się dane różnego typu np. Image,String,Integer,etc.

 

Co zrobić gdy nie chcemy bawić się w zapisywanie każdego obiektu osobno ?

Wtedy z ratunkiem przychodzi Serializacja.

 

Z Wikipedii

Proces przekształcania obiektów, tj. instancji określonych klas, do postaci szeregowej, czyli w strumień bajtów, z zachowaniem aktualnego stanu obiektu.

No więc jak wykonać taką Serializacje:

 

1. Stworzenie klasy nadającej się do serializacji:

//przykładowa klasa nadająca się do serializacji
[Serializable]
    public class MPC_TUT
    {
        Image obrazek;
        String tekst;
        int liczba;
        Boolean wartosc;
        Double liczba_2;
        test_enum enu;

        public enum test_enum
        {
            A,
            B,
            C,
            D
        }

        public MPC_TUT(Image obrazek, String tekst, int liczba, Boolean wartosc, Double liczba_2, test_enum enu)
        {
            this.obrazek = obrazek;
            this.tekst = tekst;
            this.liczba = liczba;
            this.wartosc = wartosc;
            this.liczba_2 = liczba_2;
            this.enu = enu;
        }

Klasa nadająca się do serializacji musi mieć atrybut „Serializable”(lub musimy zaimplementować interfejs ISerializable ) i musi być publiczna, lecz zmienne mogą być wszelakie np. prywatne.

 

 

2.Funkcja zapisująca nadającą się klase do pliku:

public void ZapiszObjekt<T>(T objekt, String plik)
        {
            IFormatter formatter = new BinaryFormatter();//Tworzymy potrzebny nam formater binarny
            Stream stream = new FileStream(plik, FileMode.Create, FileAccess.Write, FileShare.None);//Tworzymy nowy strumień do którego przypiszemy objekt
            formatter.Serialize(stream, objekt);//I wreszcie w tym momencie następuje nasza oczekiwana serializacja
            stream.Close();
        }

3.Zapis do pliku przykładowych danych

System.Drawing.Image obrazek = System.Drawing.Image.FromFile(@"C:/obrazek.jpeg");
            String tekst = "Ala ma kota";
            int liczba = 55;
            Boolean wartosc = true;
            Double liczba_2 = 2.55;
            MPC_TUT.test_enum enu = MPC_TUT.test_enum.C;

            MPC_TUT test = new MPC_TUT(obrazek, tekst, liczba, wartosc, liczba_2, enu);

            ZapiszObjekt<MPC_TUT>(test, @"C:/plik.dat");
I Właśnie w tym momencie na dysku C pojawił nam się nowy plik o nazwie plik.dat ;)

 

 

Deserializacja

 

 

Proces ten polega na odczytaniu wcześniej zapisanego strumienia danych i odtworzeniu na tej podstawie obiektu klasy wraz z jego stanem bezpośrednio sprzed serializacji.

 

 

Do deserializacji potrzeba nam tylko funkcji odczytującej ;)

public T WczytajObjekt<T>(String plik)
        {
            IFormatter formatter = new BinaryFormatter();//Tworzymy potrzebny nam formater binarny
            Stream stream = new FileStream(plik, FileMode.Open, FileAccess.Read, FileShare.Read);//Tworzymy nowy strumień do którego przypiszemy objekt
            T obj = (T)formatter.Deserialize(stream);//Przypisujemy do tymczasowej zmiennej danego typu obiekt który wcześniej zapisaliśmy
            stream.Close();
            return obj;
        }

Wczytanie obiektu:

MPC_TUT test_odczytu = WczytajObjekt<MPC_TUT>(@"C:/plik.dat");
I To by było na tyle w ramach tego Tutka ;)

 

Zabrania się kopiowania bez zgody autora!

xX_DevilGoku_Xx.png
  •  carbonx zmienił(a) tytuł na Serializacja i Deserializacja w C#

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...