Sledujte ma na Twitteri

Ako na serializáciu v C#

Kategória: .NET, C#, publikované: 06.09.2010, autor: Igor Kulman

Ak pracujete s väčším množstvom dát, môže byť niekedy výhodne si tieto dáta uložiť do súboru na neskoršie spracovanie. Príkladom takého využitia môže byť napríklad export dát z LDAP do súboru a až následné spracovanie dát z tohto súboru. Takýmto spôsobom je možné získať dáta čo najrýchlejšie a zaťažiť LDAP na čo najkratšiu dobu a následne ich spracovať. Práve na takéto operácie je ideálna serializácia, ktorá umožňuje jednoduché uloženie a načítanie celých objektov do (z) súboru.

Každú triedu, ktorej inštancie chcete serializovať musíte označiť atribútom Serializable a implementovať rozhranie ISerializable:

  1. [Serializable]
  2. public class LdapCompany : ISerializable
  3. {
  4. public string dxrUid { get; set; }
  5. public string DN { get; set; }
  6. public string Name { get; set; }
  7.  
  8. public LdapCompany()
  9. {
  10. }
  11.  
  12. #region ISerializable Members
  13.  
  14. public void GetObjectData(SerializationInfo info, StreamingContext context)
  15. {
  16. info.AddValue("dxrUid", this.dxrUid);
  17. info.AddValue("DN", this.DN);
  18. info.AddValue("Name", this.Name);
  19. }
  20.  
  21. public LdapCompany(SerializationInfo info, StreamingContext ctxt)
  22. {
  23. this.dxrUid = (string)info.GetValue("dxrUid", typeof(string));
  24. this.DN = (string)info.GetValue("DN", typeof(string));
  25. this.Name = (string)info.GetValue("Name", typeof(string));
  26. }
  27.  
  28. #endregion
  29. }

Ak chcete serializovať viac ako len jdenu triedu, je výhodné vytvoriť si ďalšiu triedu, ktorá bude obsahovať všetky inštancie tried, ktoré chcete serializovať a sama bude serializovaná.

  1. [Serializable()]
  2. public class ObjectToSerialize : ISerializable
  3. {
  4. ...
  5. public List≶LdapCompany> companies;
  6.  
  7. public ObjectToSerialize()
  8. {
  9. }
  10.  
  11. public ObjectToSerialize(SerializationInfo info, StreamingContext ctxt)
  12. {
  13. ...
  14. this.companies = (List<LdapCompany>)info.GetValue("companies", typeof(List<LdapCompany>));
  15. }
  16.  
  17. public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
  18. {
  19. ...
  20. info.AddValue("companies", this.companies);
  21. }
  22. }

Na súborovú serializáciu je potrené využiť ďalšiu triedu, ktoré bude inštancie triedy ObjectToSerialize serializovať (deserializovať) do (z) súboru.

  1. public class Serializer
  2. {
  3. public Serializer()
  4. {
  5. }
  6.  
  7. public void SerializeObject(string filename, ObjectToSerialize objectToSerialize)
  8. {
  9. Stream stream = File.Open(filename, FileMode.Create);
  10. BinaryFormatter bFormatter = new BinaryFormatter();
  11. bFormatter.Serialize(stream, objectToSerialize);
  12. stream.Close();
  13. }
  14.  
  15. public ObjectToSerialize DeSerializeObject(string filename)
  16. {
  17. ObjectToSerialize objectToSerialize;
  18. Stream stream = File.Open(filename, FileMode.Open);
  19. BinaryFormatter bFormatter = new BinaryFormatter();
  20. objectToSerialize = (ObjectToSerialize)bFormatter.Deserialize(stream);
  21. stream.Close();
  22. return objectToSerialize;
  23. }
  24. }

Samotná serializácia je už potom naozaj jednoduchá

  1. ObjectToSerialize objectToSerialize = new ObjectToSerialize();
  2. objectToSerialize.companies = ...
  3. ...
  4.  
  5. Serializer s = new Serializer();
  6. s.SerializeObject(@"file.txt", objectToSerialize);

rovnako ako aj deserializácia

  1. Serializer serializer = new Serializer();
  2. objectToSerialize = serializer.DeSerializeObject(@"file.txt");
  3. ...
Sledujte moje články: vybrali.sme.sk Linkuj.cz  

Čo nosíte v ruksaku ?
Ruksak je náš spoločník od základnej školy celú našu akademickú a často aj pracovnú kariéru, nosíme v ňom nevyhnutné... čítať ďalej

Ako jednoducho vytvoriť fotoblog
Ak radi fotografujete a prezentujete svoje fotografie, určite používate služby ako Flickr alebo Picasa. Na... čítať ďalej

Komentáre

RSS komentárovRSS komentárov

K článku "Ako na serializáciu v C#" zatiaľ nie sú žiadne komentáre.

 

Pridať komentár

(povinné)

(povinný,nezverejňuje sa)


Odoslať komentár

Autor

Igor Kulman Igor Kulman at LinkeIn
Igor Kulman at Flick
Igor Kulman at Twitter
Igor Kulman at Posterous

Autor je absolventom softvéroveho inžinierstva na Univerzite Karlovej v Prahe, pracuje ako Windows Phone 7 vývojár v Inmite a pôsobil aj ako prispievateľ počítačového magazínu.

Kategórie

Náhodná referencia

Chemstroj

Chemstroj