Serialisering og deserialisering af objekter

Hvis man skal gemme objekter udenfor hukommelsen gøres det typisk ved at serialisere objektets data til et permanent lager. Typisk sker det til en database, men man kan også serialisere til andre formater, f.eks. XML.

Givet flg. objekt:

[Serializable]
public class Person
{
   [XmlAttribute]
   public int Id { get; set; }
   public string Fornavn { get; set; }
   public string Efternavn { get; set; }
}

kan dette serialiseres til XML (og placeres i en MemoryStream) således:

var p = 
   new Person { 
      Id = 1, 
      Fornavn = "tester", 
      Efternavn = "serialisering" 
   };
var ms = new MemoryStream();
var x = new XmlSerializer(p.GetType());
x.Serialize(ms, p);

Herefter ligger objektets data i MemoryStream-objektet ms og kan benyttes derfra, f.eks. gemme til en fil eller sende data et andet sted hen.

Vi kan deserialisere fra denne MemoryStream således:

ms.Position = 0;
var person = (Person)x.Deserialize(ms);

Objektet person skulle nu indeholde de samme data som objektet der blev serialiseret tidligere.

Der er mange muligheder for at styre serialiseringsprocessen. Dels med atributter på objektet der skal serialiseres, dels kan man helt overtage kontrollen med at serialisere. Dette er dog materiale til en anden artikel, men umiddelbart skal man så implementere ISerializable-interfacet og selv styre lagring og indlæsning af data i det serialiserede format.

Comment