You are on page 1of 8

Serijalizacija

Scenarija serijalizacije
 Perzistencija
 Snimanje objekata u fajl i pribavljanje objekata
iz fajla
 “Remoting”
 Prosleđivanje vrednosti između više procesa
Atributi za serijalizaciju
 Klasa se proglašava serijabilnom upotrebom atributa
Serializable

[Serializable] public class MyClass {}

 Za preskakanje određenih članova koristi se atribut


NonSerialized

[Serializable] public class MyClass {


[NonSerialized] int _cashSize;
//...
}
 Implementirati interfejs ISerializable
Proces serijalizacije
 Klase koje se koriste u procesu serijalizacije
 ObjectIDGenerator – generiše ID objekte

 ObjectManager – vodi računa o objektima pri


deserijalizaciji
 Primeri klasa koje se koriste za obradu serijalizacionih
strimova
 FileStream, MemoryStream, NetworkStream

 Klase za formatiranje serijalizovanih objekata


 Upisuju ili čitaju podatke u određenom formatu

 Nejmspejs Runtime obezbeđuje BinaryFormatter i


SoapFormatter
Primer serijalizacije
class SerializeExample{
 
public static void Main(String[] args) {
// create the object graph
ArrayList l = new ArrayList();
for (int x=0; x< 100; x++) {
l.Add (x);
}
// create the filestream
FileStream s = File.Create("foo.bin");
// create the BinaryFormatter
BinaryFormatter b = new BinaryFormatter();
// serialize the graph to the stream
b.Serialize(s, l);
s.Close();
}
}
Primer deserijalizacije
class DeSerialize
{
  public static void Main(String[] args)
{
// open the filestream
FileStream s = File.OpenRead("foo.bin");
 
// create the formatter
BinaryFormatter b = new BinaryFormatter();
// deserialize
ArrayList p = (ArrayList) b.Deserialize(s);
s.Close();
// print out the new object graph
// see module text for PrintValues’ code
PrintValues(p);
}
“Custom” serijalizacija
 Implementira se ISerializable:
 Šta kada neki podaci nisu validni nakon deserijalizacije

 Šta kada se do nekih podataka događa nakon


preračunavanja

 ISerializable zahteva:
 GetObjectData metod koji se zove tokom serijalizacije
koji vraća PropertyBag tipa SerializationInfo
 PropertyBag, koji sadrži tip objekta koji se serijalizuje i
ime i objekte koji se serijalizuju
 Konstruktor koji se zove tokom deserijalizacije koji koristi
objekat tipa SerializationInfo da rekonstruiše objekat
Primer “Custom” serijalizacije
[Serializable] public class ExampleFoo : ISerializable
{
public int i, j, k;
public ExampleFoo() {}
internal ExampleFoo(SerializationInfo si,
StreamingContext context) {
//Restore our scalar values.
i = si.GetInt32("i");
j = si.GetInt32("j");
k = si.GetInt32("k");
}
  public void GetObjectData(SerializationInfo si,
StreamingContext context) {
//SerializationInfo - essentially a property bag
  //Add our three scalar values;
si.AddValue("i", i);
si.AddValue("j", j);
si.AddValue("k", k);
  Type t = this.GetType();
si.AddValue("TypeObj", t);
}
}

You might also like