lec
.pdf// Восстановим из файла сериализованный объект
fs = new FileStream ("c:\\Temp\\Customer.xml", FileMode.Open);
Customer NewCustomer1 = (Customer)sf.Deserialize (fs);
NewCustomer1.WriteCustomer();
Customer NewCustomer2 = (Customer)sf.Deserialize (fs); NewCustomer2.WriteCustomer();
}
}
Классы SoapFormatter и BinaryFormatter предоставляют возмож-
ности для сериализации не только отдельных объектов, но и более сложных структур, например хеш-таблиц.
Такие структуры должны реализовывать интерфейс ISerializable. Реализация интерфейса ISerializable необходима классу в том случае, если он хочет управлять обработкой своей сериализации. Все коллекции FCL реализуют указанный интерфейс.
Пример сериализации хеш-таблицы. using System;
using System.IO;
using System.Collections;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public class App
{
[STAThread] static void Main()
{
Serialize();
Deserialize();
}
static void Serialize()
{
FileStream fs;
// Создать хеш-таблицу с ключем и полем данных. Hashtable addresses = new Hashtable();
addresses.Add ("Сергей", "Москва, ул Пирогова, д.17, кв.25"); addresses.Add ("Юлия", "Новгород, ул.Космонавтов, д. 24"); addresses.Add ("Николай", "Тула, пр-т Ленина, д.134, кв. 76");
fs = new FileStream ("C:\\Temp\\DataFile.dat", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter(); try
{
bf.Serialize (fs, addresses);
197
[Serializable] class Student
{
public string fio; public uint yar; public float ball;
public Student(string f, uint y, float b)
{
fio = f; yar = y; ball = b;
}
public void Show()
{
Console.WriteLine("Студент {0}, год рождения {1}, ср.балл = {2}",
} |
fio, |
yar, |
ball); |
|
|
|
|
} |
|
|
|
class Example1 |
|
|
|
{ |
|
|
|
public static void Main() |
|
|
|
{ |
|
|
|
string |
fio = " "; |
|
|
Student |
std; |
|
|
float |
newBall = 0; |
uint |
k; |
long |
pos; |
string path = @"c:\Temp\GroupSerial.bin"; FileStream fs;
BinaryFormatter frm;
ArrayList tableStd = new ArrayList();
frm = new BinaryFormatter();
// Выборочная модификация объектов fs = new FileStream(path, FileMode.Open);
while (true)
{
Console.WriteLine("____________________________" + "______________________________");
Console.Write(
"Введите фамилию (пробел - конец поиска): "); fio = Console.ReadLine();
if (fio == " " || fio.Length == 0) break;
200