Паролингизни унутдингизми?
Login
Left, Right, Center Left, Center, Right Center, Left, Right

Биз хақимизда


Ассаламу алайкум! Ушбу www.e-dastur.uz сайтимиз асосан илм талабида изланаётган ёшлар учундир, бу сайтимиз ҳақида фикр мулоҳазаларингиз ёки таклифларингиз бўлса, биз билан қуёидаги e-mail орқали боғланишингиз мумкин.

E-mail: musad@bk.ru



C# да сериализация ва десериализация

c-sharpC# да сериализация ва десериализация

Сериализаия - деб объектларни битлар кетма кетлиги кўринишида (файлга/хотирага/маълумотлар базасига) сақлаб қўйиш  жараёнига айтилади. Бу жараённи тескариси эса десериализация деб аталади. Сериализация ёрдамида объектларни файлга сақлаб кейинроқ эса десериализацияни ишлатиб объектни холатини ўша ёзилган файлдан тиклаб олиш мумкин.


Сериализация жараёнини Binary, XML ёки SOAP турида амалга ошириш мумкин. Binary туридаги сериализация/десериализация учун қуйидаги номлар маконларини керак бўлади:

1.using System.Runtime.Serialization.Formatters.Binary;
2.using System.Runtime.Serialization;
3.using System.IO;

Сериализация учун бизга System.Runtime.Serialization.Formatters.Binary номлар маконида жойлашган BinaryFormatter класси керак бўлади. Бу класс объектни иккилик форматида сериализация ва десериализация қила олади. Бу ишларни эса Serialize() ва Deserialize() методлари бажаради. Хамда сериализацияни (десериализацияни) ишлатиши лозим бўлган классни Serializable атрибути бўлиши шарт.

Мисол:

01.using System;
02.using System.Collections.Generic;
03.using System.Linq;
04.using System.Text;
05.using System.Runtime.Serialization.Formatters.Binary;
06.using System.Runtime.Serialization;
07.using System.IO;
08.
09.namespace SerializeData
10.{
11.[Serializable]
12.class Program
13.{
14.static void Main(string[] args)
15.{
16.Serialize();
17.Deserialize();
18.}
19.
20.static void Serialize()
21.{
22.// сериализация қилинадиган объектни тузамиз:
23.List haftaKunlari= new List();
24.haftaKunlari.Add("душанба");
25.haftaKunlari.Add("сешанба");
26.haftaKunlari.Add("чоршанба");
27.
28.// файлга ёзиш учун янги "поток" очамиз:
29.FileStream fs = new FileStream(@"C:\temp\SerializaciyaQilinganFayl.s", FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
30.BinaryFormatter bf = new BinaryFormatter();
31.
32.//сериализация
33.bf.Serialize(fs, haftaKunlari);
34.fs.Close();
35.}
36.
37.static void Deserialize()
38.{
39.List haftaKunlari;
40.FileStream fs = new FileStream(@"C:\temp\SerializaciyaQilinganFayl.s", FileMode.Open, FileAccess.Read, FileShare.Read);
41.BinaryFormatter bf=new BinaryFormatter();
42.haftaKunlari = (List)bf.Deserialize(fs);
43.fs.Close();
44.
45.foreach (string kun in haftaKunlari)
46.{
47.Console.WriteLine(kun);
48.}
49.}
50.
51.}
52.}
Юқоридаги мисол ёрдамида объектни иккилик яъни Binary форматида сериализация қилинади. Бундан ташқари объектларни яна xml-форматида хам сериализация қилиш мумкин. Бунда System.Xml.Serialization номлар маконидаги класслардан фойдаланиб, қуйидаги код мисол бўлиши мумкин:
1. Сериализация қилиниши керак бўлган класс Serializable атрибути билан белгиланиши шарт:
01.[Serializable()]
02.public class TestClass
03.{
04.private string someString;
05.public string SomeString
06.{
07.get { return someString; }
08.set { someString = value; }
09.}
10.
11.private List<string> settings = new List<string>();
12.public List<string> Settings
13.{
14.get { return settings; }
15.set { settings = value; }
16.}
17.
18.// NonSerialized атрибути қўйилган аъзолар сериализация қилинмайди
19.[NonSerialized()]
20.private int willBeIgnored1 = 1;
21.private int willBeIgnored2 = 1;
22.}

2. Сериализация қилиш:

01.// TestClass га мансуб бўлган янги объектни эълон қиламиз:
02.TestClass TestObj = new TestClass();
03.
04.// Хоссаларига қийматлар белгилаймиз:
05.TestObj.SomeString = "foo";
06.TestObj.Settings.Add("A");
07.TestObj.Settings.Add("B");
08.TestObj.Settings.Add("C");
09.
10.// TestClass турига мансуб бўлган XmlSerializer объектини тузамиз:
11.XmlSerializer SerializerObj = new XmlSerializer(typeof(TestClass));
12.
13.// Сериализация қилинган объктни ёзиш учун янги файл потокини очамиз:
14.TextWriter WriteFileStream = new StreamWriter(@"C:\temp\SerializaciyaQilinganFayl.xml");
15.SerializerObj.Serialize(WriteFileStream, TestObj);
16.
17.// потокни ёпамиз:
18.WriteFileStream.Close();


3. SerializaciyaQilinganFayl.xml файл қуйидаги кўринишда бўлади:

01.<?xml version="1.0"?>
03.<SomeString>foo</SomeString>
04.<Settings>
05.<string>A</string>
06.<string>B</string>
07.<string>C</string>
08.</Settings>
09.</TestClass>

4. Сақланган объектни файлдан олиб, десериализация қиламиз:
01.// XML файлни ўқиш учун янги файл потокини эълон қиламиз:
02.FileStream ReadFileStream = new FileStream(@"C:\test.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
03.
04.// Deserialize функциясини ишлатиб объектни TestClass классига мансуб бўлган LoadedObj объектга оламиз:
05.TestClass LoadedObj = (TestClass)SerializerObj.Deserialize(ReadFileStream);
06.
07.// потокни ёпамиз
08.ReadFileStream.Close();
09.
10.// Юкланган объектни хоссаларини текшириб кўрамиз:
11.Console.WriteLine(LoadedObj.SomeString);
12.
13.foreach (string Setting in LoadedObj.Settings)
14.Console.WriteLine(Setting);

Фарход Дадажонов

Manba: www.virtualdars.uz

Share