私には2つのクラスAとBがあります。クラスBは、以下に示すようにクラスAを継承します。
<ProtoContract()>
Public Class A
<ProtoMember(1)>
Public Property ID As Integer
<ProtoMember(2)>
Public Property Name() As String = String.Empty
End Class
<ProtoContract()>
Public Class B
Inherits A
<ProtoMember(101)>
Property Title As String = String.Empty
<ProtoMember(102)>
Property Status As String = String.Empty
<ProtoMember(103)>
End Class
ProtoBufを使用してクラスBのインスタンスをシリアル化および逆シリアル化すると、クラスAのプロパティ値が失われます。これについて少し調べた後、どういうわけかクラスBでProtoInclude()タグを使用する必要があると思いますが、運が悪かったです。
サンプルコード:
Dim stuff as New B
With stuff
.ID = 1
.Name = "Bob"
.Title = "Director"
.Status = "Active"
End With
Dim buffer as Byte()
Dim deserializedStuff as new B
Using memStream As New IO.MemoryStream
ProtoBuf.Serializer.Serialize(memStream, stuff)
buffer = memStream.ToArray
End Using
Using memStream As New MemoryStream(buffer)
memStream.Position = 0
deserializedStuff = ProtoBuf.Serializer.Deserialize(Of B)(memStream)
End Using
この時点で、「deserializedStuff」の継承されたプロパティ値は失われます。デフォルト値に設定されているように見えます。私が間違っていることについて何か考えはありますか?前もって感謝します。