SoapFormatter C#
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы рассмотрели класс "BinaryFormatter", который реализует бинарную сериализацию в C#. В данной небольшой статье я бы хотел привести код, который реализует XML-сериализацию. Данный вид сериализации реализует класс "SoapFormatter". Код будет отличаться от кода прошлой статьи только одной строкой:
IFormatter formatter = new SoapFormatter();
Т.е. разница только в классе форматера.
Класс "SoapFormatter" сохраняет объект в формате "SOAP" (XML-формат для приема и передачи сообщений от веб-служб). Данный класс расположен в пространстве имен "System.Runtime.Serialization.Formatters.Soap", который находится в отдельной сборке. В первую очередь необходимо добавить ссылку на "System.Runtime.Serialization.Formatters.Soap.dll" через "Add Reference" ("Добавить ссылку" — "Сборки" — "Платформа") в "Visual Studio".
Приведу полный код, чтобы был на сайте:
using System;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
namespace TestApplicationForStudy
{
class Program
{
static void Main(string[] args)
{
// Создаём объект класса
Room room1 = new Room();
room1.Length = 5;
room1.Width = 4;
room1.HasFurniture = true;
// Сериализуем его
IFormatter formatter = new SoapFormatter();
FileStream buffer = File.Create("C:\\room.xml");
formatter.Serialize(buffer, room1);
buffer.Close();
Console.ReadLine();
}
}
[Serializable]
public class Room : ISerializable
{
public double Width { get; set; }
public double Length { get; set; }
[NonSerialized]
public int numberOfWindows;
public bool HasFurniture { get; set; }
public Room()
{
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Width", this.Width);
info.AddValue("Length", this.Length);
info.AddValue("hasFurniture", this.HasFurniture);
}
public Room(SerializationInfo info, StreamingContext context)
{
this.Width = (double)info.GetValue("Width", typeof(double));
this.Length = (double)info.GetValue("Length", typeof(double));
this.HasFurniture = (bool)info.GetValue("hasFurniture", typeof(bool));
}
}
}
Десериализация выполняется следующим образом:
IFormatter formatter = new SoapFormatter();
// Открываем файл, который нужно прочитать
FileStream buffer = File.OpenRead("C:\\room.xml");
Room room1 = formatter.Deserialize(buffer) as Room;
Console.WriteLine("Длина = {0}, Ширина = {1}", room1.Length, room1.Width);
if (room1.HasFurniture) Console.WriteLine("Мебель есть"); else Console.WriteLine("Мебели нет!");
buffer.Close();
В данной статье вы узнали, как реализовать XML-сериализацию в C#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




