Забележки: Примерите са на C#
Примерите предполагат основно познаване на C# и .NET /класове, интерфейси,атрибути ,концепция за сериализация, .../
Урока има за цел да обърне внимание на някой проблеми възникващи при сериализацията на обекти в .NET, когато се използва във реални системи.
Примерите се отнасят за binary сериализация, въпреки че са валидни и за XML сериализацията. Но за нея в друг урок.
Въпреки че, стандартният механизм за сериализация в .NET framework е лесен и удобен начин на съхраняване/обмен на обекти, във реалните системи
той може да създаде доста големи проблеми. В този урок ще се спрем по специално на binary сериализацията.
Стандартния начин за сериализация предполага маркиране на класа, който искаме на сериализираме със атрибут
Serializable
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
| [Serializable]
class MyClass1
{
private string m_Title;
public string Title
{
get{return m_Title;}
set{m_Title=value;}
}
} |
Mожем да сериализраме класа по следния начин:
CODE1
2
3
4
5
6
7
| MyClass1 myClass1 = new MyClass1();
myClass1.Title="title1";
string fileName = "c:\myclass.bin";
Stream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.Write);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream,myClass1);
stream.Close(); |
След това можем да десериализираме нашият обект по следния начин:
CODE1
2
3
4
5
6
7
| MyClass1 myClass1 = null;
string fileName = "c:\myclass.bin";
Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryFormatter formatter = new BinaryFormatter();
myClass1 =(MyClass1)formatter.Deserialize(stream);
stream.Close();
Console.WriteLn("Title is "+myClass1.Title); |