Сериализация объектов в C#

Сериализация позволяет сохранить на диске объекты, а затем обратно прочитать их в память. Сериализация выполняется по тем же правилам, что и в Java. Даже если вы не читали первую часть этой книги, рекомендуем просмотреть главу 2. Мы ограничимся лишь небольшим примером с комментариями (листинг 3.17).

Листинг 3.17. Сериализация объектов

using System; using System.IO;

using System.Runtime.Serialization;

using System.Runtime.Serialization.Formatters.Binary; [Serializable] // Этот спецификатор необходимо помещать при // сериализации

class Customer

private int CustomerNumber; // Члены класса Customer –

// CustomerNumber, CustomerName

private string CustomerName;

public void WriteCustomer()

Console.WriteLine("Number is: "+this.CustomerNumber); Console.WriteLine("Name is: "+ this.CustomerName);

}

public Customer (

// определение конструктора класса Customer;

// ему передаются два параметра int NewNumber, string NewName)

{

this.CustomerNumber=NewNumber; // Инициализация переменных

// класса

this.CustomerName=NewName;

}

}

class Example {

public static void Main()

{

// Создаем объект класса Customer:

Customer my=new Customer(1, "vovan");

my.WriteCustomer(); // Запускаемметод WriteCustomer()

// объекта

FileStream fs= new FileStream("с.dat",

FileMode.Create);

// Еще один способ создать файл через конструктор // FileStream с указанием режима FileMode.Create BinaryFormatter bf= new BinaryFormatter();

// Класс BinaryFormatter используется для сериализации // объектов

bf.Serialize(fs,my); // Вот это и есть сериализация объекта // my

fs.Flush(); // Очищаем выходной поток fs.Close(); // Закрываем выходной поток

// Теперь прочитаем объект из файла:

FileStream rs = new FileStream("c.dat",FileMode.Open); Customer newone=(Customer) bf.Deserialize(rs); // Создаем // новый объект и читаем объект из файла перед оператором // bf.Deserialize(rs) указываем в скобках тип // считываемого объекта для приведения типов;

// такой порядок следует запомнить на будущее

newone.WriteCustomer();//выполняем вывод для нового объекта

System.Console.ReadLine();

}

}

В этом примере сериализуем объект класса customer следующим образом:

BinaryFormatter bf= new BinaryFormatter();

// Класс BinaryFormatter используется для сериализации объектов

bf.Serialize(fs,my); // Вот это и есть сериализация объекта my // класса Customer Чтение сериализованного объекта выполняют следующие строки кода:

// Теперь прочитаем объект из файла

FileStream rs = new FileStream("c.dat",FileMode.Open);

Customer newone=(Customer) bf.Deserialise(rs); // Создаем // новый объект и читаем объект из файла

Замечание

Сериализуются только простые объекты (не контейнеры), которые не содержат других объектов. Методы при сериализации не сохраняются.

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100