Kako raditi sa serializacijom u .Netu

Kada radite s aplikacijama, često ćete trebati pohranjivati ​​podatke u trajni ili nepostojani medij za pohranu kako bi se isti podaci mogli kasnije dohvatiti. Serijalizacija, značajka koju pruža CLR, može vam pomoći da to postignete.

Serijalizacija se može definirati kao postupak pretvaranja objekta u tok bajtova, zadržavanje stanja objekta u memoriji, bazi podataka datoteke. Obrnuto od serializacije je deserializacija, koja rekonstruira objekt iz struje bajtova. Drugim riječima, deserializacija je postupak pretvaranja serializiranog objekta u izvorno stanje.

Serijalizacija je potrebna da bi se objekt prebacio preko žice - to olakšava prijenos objekta preko mreže. Stoga možete iskoristiti serializaciju za prosljeđivanje objekta s jedne domene aplikacije na drugu. Također možete iskoristiti prednost serializacije da biste stvorili klon predmeta.

Međutim, serializacija je skupa i zbog prekomjernih resursa koji su uključeni u serializiranje i uklanjanje serializacije objekata. Da biste radili sa serializacijom u .Netu, trebali biste iskoristiti prostor imena System.Runtime.Serialization, tj. Trebali biste uključiti ovaj prostor imena u svoj program.

Klasu možete učiniti serializirajućom pomoću atributa [Serializable]. Evo primjera koji pokazuje kako možete primijeniti ovaj atribut na klasu.

[Serializable]

public class Product

{

   public int productCode;

   public string productName;

}

Sada, ako želite ograničiti serializaciju jednog ili više članova klase, možete koristiti atribut NonSerialized kako je prikazano u isječku koda koji je dat u nastavku.

[Serializable]

    public class Product

    {

        public int productCode;

        public string productName;

        [NonSerialized()]

        public double productPrice;

    }

Okvir .Net pruža podršku za sljedeće vrste serializacije.

  1. Binarni
  2. SAPUN
  3. XML
  4. Prilagođen

Binarna serializacija

Binarna serializacija je najbrža od svih tehnika serializacije - može se koristiti za serializaciju objekta u binarni tok. To je vrsta serializacije koja se može koristiti za serializaciju objekta u izlazni tok uz očuvanje identiteta objekta - podaci o tipu se ne gube u procesu serializacije. Imajte na umu da se prilikom upotrebe binarne serializacije objekt sprema u cijelosti. Da biste radili s binarnom serializacijom, trebali biste uključiti prostor imena System.Runtime.Serialization.Formatters.Binary.

Serializacija SOAP-a

SOAP (Simple Object Access Protocol) serializacija dobar je izbor kada želite prenijeti objekte iz jednog programa u drugi kada ti programi koriste heterogene arhitekture. U osnovi, glavna prednost korištenja SOAP serializacije je prenosivost. SOAP serializacija se može koristiti za serializaciju objekta u SOAP formatu. Da biste radili sa SOAP serializacijom, u svoj program trebali biste uključiti prostor imena System.Runtime.Serialization.Formatters.Soap. Imajte na umu da se poput XML serializacije, objekti koji su serializirani pomoću SOAP serializacije održavaju kao XML.

XML serializacija

XML serializacija je vrsta serializacije koja se koristi za serializaciju javnih članova instance klase u XML tok. Imajte na umu da je XML serializacija spora u usporedbi s binarnom serializacijom - zapravo je puno sporija. Primarna prednost XML serializaton-a je u tome što pruža podršku na više platformi, a budući da je temeljen na tekstu, čitljiv je i može ga se i uređivati. Možete iskoristiti prednost XmlAttribute i postaviti ga na svojstvo kako biste omogućili serijalizaciju svojstva pomoću XML serializacije. Sljedeći isječak koda ilustrira kako možete koristiti XmlAttribute na svojstvu.

[XmlAttribute("productName")]

public string ProductName

{

  get

  {

    return productName;

  }

  set

  {

    productName = value;

  }

}

Za serializaciju i deserializaciju objekta pomoću XML serializacije možete upotrijebiti XmlSerializer. Sljedeći isječak koda pokazuje kako možete serializirati objekt pomoću XML serializacije - imajte na umu kako se koristi XmlSerializer.

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

using (TextWriter textWriter = new StreamWriter(@"D:\Product.xml"))

 {

    xmlSerializer.Serialize(textWriter, productObject);

 }

Prilagođena serializacija

Možete iskoristiti prilagođenu serializaciju da biste kontrolirali kako se instanca tipa može serializirati i deserializirati. Prilagođenu serializaciju možete implementirati primjenom sučelja ISerializable. Sučelje ISerializable deklarira metodu GetObjectData (). Sljedeći isječak koda ilustrira kako možete implementirati prilagođenu tehniku ​​serializacije implementacijom sučelja ISerializable.

[Serializable]

public class Product : ISerializable

{

    public void GetObjectData(SerializationInfo info, StreamingContext context)

    {

        //Usual code

    }

}