Простая сериализация. Простое восстановление. Применение сериализации при клонировании объектов.
На рис. 9.4 показано, как выглядит полученный файл в формате SOAP.
Рис. 9.4. Объект, сохраненный в формате SOAP
Примечание
Отдельные поля класса можно пометить атрибутом <NonSerialized()>. Состояние этих полей не сохраняется в процессе сериализации.
Простое восстановление
С восстановлением сохраненного объекта дело обстоит сложнее: поскольку при десериализации возвращается тип Object, приходится выполнять явное преобразование к нужному типу, как в выделенной строке следующего фрагмента:
Function DeSerializeFromSoap(ByVal fName As String) As ArrayList Dim fStream As New FileStreamtfName.FileMode.Open. FileAccess.Read) Dim mySoapFormatter As New Formatters.Soap.SoapFormatter() Try fStream = New FileStream("C:\test.xml". FileMode.Open. FileAccess.Read) Return CType(mySoapFormatter.Deserialize(fStream), ArrayList) Catch e As Exception Throw e Finally If Not (fStream Is Nothing) Then fStream.Close() End Try End Function
Применение сериализации при клонировании объектов
У сериализации имеется и такое нетривиальное применение, как клонирование сложных объектов. Фокус заключается в том, чтобы записать объект в поток памяти MemoryStream и затем восстановить его (потоки MemoryStream позволяют работать с данными в быстрой оперативной памяти по аналогии с тем, как поток FileStream работает с файлом на диске). Ниже приведен типичный код клонирования:
Public Function Clone()As Object Implements ICloneable.Clone Dim myBinaryFormatter As New Formatters.Binary.BinaryFormatter() Try Seriali'zeToBinary() mSTream.Position = 0 Return myBinaryFormatter.Deserialize(mSTream) Finally mSTream.Close() End Try End Function Sub SerializeToBinary() Dim myBinaryFormatter As New Formatters.Binary.BinaryFormatter() Try mSTream = New MemoryStream() myBinaryFormatter.Serialize(mSTream.Me) Catch Throw End Try End Sub