VB.Net Tutorial/Stream File/DeserializationCallback

Материал из VB Эксперт
Перейти к: навигация, поиск

Deserialization Callback

Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.Runtime.Serialization.Formatters.Soap
Public Class Tester
    Public Shared Sub Main
    
        Dim myClsSerializable As New SerializeObject()
        SerializeBinary(myClsSerializable)
        Console.WriteLine(FileContent(False))
                
        Dim myFileStream As FileStream
        myFileStream = New FileStream("test.dat", FileMode.Open, FileAccess.Read)
        Dim myFormatter As New BinaryFormatter()
        myClsSerializable = CType(myFormatter.Deserialize(myFileStream), SerializeObject)
    End Sub
    Private Shared Function FileContent(ByVal blnBinary As Boolean) As String
        Dim strContent As String
        Dim myStreamReader As StreamReader
        Dim myFileStream As FileStream
        Dim i As Integer
        Try
            myFileStream = New FileStream("test.dat", FileMode.Open, FileAccess.Read)
            If blnBinary = True Then
                For i = 1 To myFileStream.Length
                    strContent += myFileStream.ReadByte.ToString + " "
                Next
            Else
                myStreamReader = New StreamReader(myFileStream)
                strContent = myStreamReader.ReadToEnd
            End If
            myFileStream.Flush()
            myFileStream.Close()
            Return strContent
        Catch ex As IOException
            Console.WriteLine(ex.Message)
        End Try
    End Function
    Private Shared Sub SerializeBinary(ByVal myClsSerializable As SerializeObject)
        Dim myFileStream As FileStream = New FileStream("test.dat", FileMode.Create, FileAccess.Write)
        Dim myBFormatter As BinaryFormatter = New BinaryFormatter()
        myBFormatter.Serialize(myFileStream, myClsSerializable)
        myFileStream.Flush()
        myFileStream.Close()
    End Sub
End Class

<Serializable()> _
Public Class SerializeObject
    Implements IDeserializationCallback
    Public firstNumber As Integer
    Public secondNumber As Integer
    <NonSerialized()> Public thirdNumber As Integer
    <NonSerialized()> Public forthNumber As Integer
    Public Sub New()
        firstNumber = 1000
        secondNumber = 2000
        thirdNumber = 100
        forthNumber = 200
    End Sub
    Public Sub OnDeserialization(ByVal sender As Object) _
       Implements IDeserializationCallback.OnDeserialization
       Console.WriteLine("OnDeserialization")
        thirdNumber = 100
    End Sub
End Class