Sunteți pe pagina 1din 7

11.

Serializare

11.1. Noţiunea de serializare


Prin serializare în programare se subînţelege transformarea unei structuri de date sau unui
obiect într-o secvenţă de octeţi (în cazul general secvenţă de biţi) cu posibilitate de restabilire
ulterioară a obiectului original.
Operaţia inversă la serializare este deserializare (structurare) care reprezintă restabilirea
structurii iniţiale sau obiectului iniţial dintr-o secvenţă de octeţi (în cazul general secvenţă de
biţi).
Serializarea se foloseşte pentru transmitea obiectelor prin reţea şi pentru înscrierea lor în
fişiere.
De exemplu, vrem să creăm o aplicaţie distribuită, diferite părţile ale căreia trebuie să facă
schimb de date cu o structură complexă. În acest caz, pentru tipurile de date care urmează să fie
transmise, scriem un cod care realizează serializarea şi deserializarea. Obiectul se umple cu date
dorite, apoi se apelează codul de serializare, ca rezultat se obţine, de exemplu, XML-document.
Rezultatul serializării se transferă destinatarului, de exemplu, prin e-mail sau HTTP. Aplicaţia-
destinaţie creează un obiect de acelaşi tip şi apelează codul de deserializare, obţinând un obiect
cu aceleaşi date care au fost în obiectul-expeditor. Conform acestei scheme lucrează, de exemplu,
serializarea obiectelor prin SOAP la Microsoft.

11.2. Serializare bază

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

class MainApp
{
public static void Main()
{
SampleObject output_object = new SampleObject();

output_object.m_property1 = "Sample Object";


output_object.m_property2 = 10;
output_object.m_property3 = 0.0123456789;

IFormatter formatter = new BinaryFormatter();

94
Programare vizuală (suport de curs), A.Pereteatcu, S.Pereteatcu

Stream output_stream = new FileStream("SerializedObjects.bin",


FileMode.Create,
FileAccess.Write,
FileShare.None);

formatter.Serialize(output_stream,output_object);

output_stream.Close();

SampleObject input_object = new SampleObject();

input_object.m_property1 = "Initial Object";


input_object.m_property2 = 33;
input_object.m_property3 = 3.14;

Console.WriteLine("");
Console.WriteLine("Before reading:");
Console.WriteLine("property1: {0}",input_object.m_property1);
Console.WriteLine("property2: {0}",input_object.m_property2);
Console.WriteLine("property3: {0}",input_object.m_property3);

Stream input_stream = new FileStream("SerializedObjects.bin",


FileMode.Open,
FileAccess.Read,
FileShare.Read);
input_object = (SampleObject)formatter.Deserialize(input_stream);
input_stream.Close();

Console.WriteLine("After reading:");

Console.WriteLine("property1: {0}",input_object.m_property1);
Console.WriteLine("property2: {0}",input_object.m_property2);
Console.WriteLine("property3: {0}",input_object.m_property3);

}
}

[Serializable]
public class SampleObject
{
public String m_property1;
[NonSerialized] public int m_property2;
public double m_property3;

95
Programare vizuală (suport de curs), A.Pereteatcu, S.Pereteatcu

public SampleObject()
{
m_property1=null;
m_property2=0;
m_property3=0.0;
}
}

/*
Before reading:
property1: Initial Object
property2: 33
property3: 3,14
After reading:
property1: Sample Object
property2: 0
property3: 0,0123456789
*/

11.3. Serializare utilizator

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

class MainApp
{
public static void Main()
{
SampleObject output_object = new SampleObject();

output_object.m_property1 = "Sample Object";


output_object.m_property2 = 10;
output_object.m_property3 = 0.0123456789;

IFormatter formatter = new BinaryFormatter();

Stream output_stream = new FileStream("SerializedObjects.bin",


FileMode.Create,
FileAccess.Write,

96
Programare vizuală (suport de curs), A.Pereteatcu, S.Pereteatcu

FileShare.None);

formatter.Serialize(output_stream,output_object);

output_stream.Close();

Stream input_stream = new FileStream("SerializedObjects.bin",


FileMode.Open,
FileAccess.Read,
FileShare.Read);

SampleObject input_object =
(SampleObject)formatter.Deserialize(input_stream);

input_stream.Close();

Console.WriteLine("property1: {0}",input_object.m_property1);
Console.WriteLine("property2: {0}",input_object.m_property2);
Console.WriteLine("property3: {0}",input_object.m_property3);
for(int i=0; i<1; );
}
}

[Serializable]
public class SampleObject : ISerializable
{
public String m_property1;
public int m_property2;
public double m_property3;

public SampleObject()
{
m_property1=null;
m_property2=0;
m_property3=0.0;
}

protected SampleObject(SerializationInfo info, StreamingContext context)


{
m_property1 = info.GetString("property1");
m_property2 = info.GetInt32 ("property2");
m_property3 = info.GetDouble("property3");

97
Programare vizuală (suport de curs), A.Pereteatcu, S.Pereteatcu

public virtual void GetObjectData(SerializationInfo info,


StreamingContext context)
{
info.AddValue("property1",m_property1);
info.AddValue("property2",m_property2);
info.AddValue("property3",m_property3);
}
}

98
Programare vizuală (suport de curs), A.Pereteatcu, S.Pereteatcu

12. Activităţi

Lucrarea de laborator № 1
Crearea aplicaţiei de tipul Dialog Based
Stabilirea sarcinii.
Să creaţi o clasă pentru domeniul ales. Să elaboraţi o aplicaţie de tip Dialog Based pentru
clasa respectivă, care va asigura lucrul cu obiecte ale acestei clase, şi anume: crearea obiectelor,
salvarea obiectelor pe disc, preluarea obiectelor de pe disc, vizualizarea informaţiilor despre
obiecte, editarea obiectelor, eliminarea obiectelor, realizarea metodelor etc. La elaborarea
interfeţei aplicaţiei să folosiţi următoarele elemente de dirijare (controale):
Static Text, Edit Box, Button, Check Box, Radio Button, Combo Box, List Box, Spin, List
Control, Tree Control, Tab Control.
Notă. Pentru a alege obiectul din listă să utilizaţi controlul List Box sau Combo Box, iar
pentru a vizualiza parametrii obiectelor – List Control.

Lista domeniilor de realizare a proiectului:

1. Personal computer______ 21. Polygon______________ 41. Bicycle______________


2. Processor_____________ 22. Star_________________ 42. Flower_______________
3. Monitor______________ 23. Rhombus_____________ 43. Mushroom____________
4. Printer_______________ 24. City_________________ 44. Subject_______________
5. Winchester____________ 25. Address______________ 45. Flight________________
6. Video card____________ 26. Book________________ 46. Dog_________________
7. Mother board__________ 27. Collaborator__________ 47. Cat__________________
8. Mouse_______________ 28. Student______________ 48. Parrot________________
9. Flush memory_________ 29. Film_________________ 49. Cow_________________
10. Mobile phone__________ 30. Cinematograph________ 50. Bit string_____________
11. Television_____________ 31. Pharmacy____________ 51. Octal________________
12. Fridge________________ 32. Mark________________ 52. Hexadecimal__________
13. Washing machine_______ 33. Coin_________________ 53. Rational number________
14. Triangle______________ 34. Hotel________________ 54. Complex number_______
15. Rectangle_____________ 35. Museum______________ 55. _____________________
16. Ellipse_______________ 36. Shop_________________ 56. _____________________
17. Circle________________ 37. Baggage______________ 57. _____________________
18. Bezier________________ 38. Apartment____________ 58. _____________________
19. Trapeze_______________ 39. Patient_______________ 59. _____________________
20. Parallelogram__________ 40. Car__________________ 60. _____________________

99
Programare vizuală (suport de curs), A.Pereteatcu, S.Pereteatcu

13. Bibliografia
1. Bates Jon, Tompkins Tim Utilizare Visual C++ 6/ Trad. Din limba engl. – Bucureşti:
Editura Teora, 1999. – 760 p.
2. Янг М. Дж. Visual C++. Полное руководство.— Киев: ―Ирина‖, BHV, 2000
3. Гильберт С., Маккарти Б. Самоучитель Visual C++ 6.— Киев: ―DiaSoft‖, 1999
4. Холзнер С. Visual C++ 6. Учебный курс.— СПб: ―Питер‖, 2001
5. Robinson L. Programarea bazelor de date cu Vizual C++ 6.— Bucureşti: Teora, 2001
6. Schildt H. C++. Manual complet.— Bucureşti: Teora, 2000.
7. Страустрап Б. Язык программирования C++.— М: ―БИНОМ‖, 1999
8. Мешков А, Тихомиров Ю. Visual C++ и MFC .— СПб: BHV, 2000
9. А.В. Фролов, Г.В. Фролов Визуальное проектирование приложений C#. – Москва:
Издательство Кудиц-Образ.
10. Фролов А.В., Фролов Г.В. Графический интерфейс GDI в Microsoft Windows. — М.:
ДИАЛОГ-МИФИ, 1993.
11. Петцольд Ч. Программирование для Microsoft Windows на C#. — М.: Издательско-
торговый дом Русская Редакция, 2002.
12. Кристиан Нейгел, Билл Ивьен, Джей Глинн, и др. C# 2005 для профессионалов.
Диалектика, 2006. – 1376 с.

Adresele site-lor din internet:

1. http://msdn.microsoft.com/en-gb/library/default.aspx
2. http://frolov-lib.ru/
3. http://windowsclient.net
4. http://www.firststeps.ru/

100

S-ar putea să vă placă și