クラスの構造への将来の追加を模倣するために、クラスをシリアル化し、それを 2 番目のクラスに逆シリアル化しようとしています。
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
<Serializable()> _
Public Class Serial
Implements ISerializable
Public Num1 As Integer
Public Num2 As Integer
Protected Sub New(ByVal Info As SerializationInfo, ByVal Context As StreamingContext)
With Info
Num1 = .GetInt32("Num1")
Num2 = .GetInt32("Num2")
End With
End Sub
Public Sub GetObjectData(info As System.Runtime.Serialization.SerializationInfo, context As System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable.GetObjectData
With info
.FullTypeName = "ObjectSerialization. Serial"
.AddValue("Num1", Num1)
.AddValue("Num2", Num2)
End With
End Sub
End Class
<Serializable()> _
Public Class Serial2
Implements ISerializable
Public Num1 As Integer
Public Num2 As Integer
Public Num3 As Integer
Protected Sub New(ByVal Info As SerializationInfo, ByVal Context As StreamingContext)
With Info
Num1 = .GetInt32("Num1")
Num2 = .GetInt32("Num2")
Num3 = .GetInt32("Num3")
End With
End Sub
Public Sub GetObjectData(info As System.Runtime.Serialization.SerializationInfo, context As System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable.GetObjectData
With info
.FullTypeName = "ObjectSerialization. Serial"
.AddValue("Num1", Num1)
.AddValue("Num2", Num2)
.AddValue("Num3", Num3)
End With
End Sub
End Class
以下のコードで逆シリアル化しようとすると、例外が発生します (タイプ ObjectSerialization を読み込めません。逆シリアル化にはシリアルが必要です)。誰かが私を正しい方向に向けることができますか?
Dim s1 As New Serial
Dim s2 As New Serial2
s1.Num1 = 99
s1.Num2 = 500
Dim fs As New FileStream("DataFile.dat", FileMode.Create)
Dim formatter As New BinaryFormatter
Try
formatter.Serialize(fs, s1)
Catch ex As SerializationException
Console.WriteLine("Failed to serialize. Reason: " & ex.Message)
Finally
fs.Close()
End Try
fs = New FileStream("DataFile.dat", FileMode.Open)
Try
formatter = New BinaryFormatter
s2 = formatter.Deserialize(fs)
Catch ex As SerializationException
Console.WriteLine("Failed to deserialize. Reason: " & ex.Message)
Throw
Finally
fs.Close()
End Try
End Sub