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:
[Serializable] public class LdapCompany : ISerializable { public string dxrUid { get; set; } public string DN { get; set; } public string Name { get; set; } public LdapCompany() { } #region ISerializable Members public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("dxrUid", this.dxrUid); info.AddValue("DN", this.DN); info.AddValue("Name", this.Name); } public LdapCompany(SerializationInfo info, StreamingContext ctxt) { } #endregion }
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á.
[Serializable()] public class ObjectToSerialize : ISerializable { ... public List≶LdapCompany> companies; public ObjectToSerialize() { } public ObjectToSerialize(SerializationInfo info, StreamingContext ctxt) { ... } public void GetObjectData(SerializationInfo info, StreamingContext ctxt) { ... info.AddValue("companies", this.companies); } }
Na súborovú serializáciu je potrené využiť ďalšiu triedu, ktoré bude inštancie triedy ObjectToSerialize serializovať (deserializovať) do (z) súboru.
public class Serializer { public Serializer() { } public void SerializeObject(string filename, ObjectToSerialize objectToSerialize) { Stream stream = File.Open(filename, FileMode.Create); bFormatter.Serialize(stream, objectToSerialize); stream.Close(); } public ObjectToSerialize DeSerializeObject(string filename) { ObjectToSerialize objectToSerialize; Stream stream = File.Open(filename, FileMode.Open); objectToSerialize = (ObjectToSerialize)bFormatter.Deserialize(stream); stream.Close(); return objectToSerialize; } }
Samotná serializácia je už potom naozaj jednoduchá
objectToSerialize.companies = ... ... s.SerializeObject(@"file.txt", objectToSerialize);
rovnako ako aj deserializácia
objectToSerialize = serializer.DeSerializeObject(@"file.txt"); ...
Č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
Pridať komentár
Autor
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.


RSS komentárov



