Могу ли я десериализовать объект, если базовый класс был немного изменен?

Я написал собственный класс MyClass и пометил его < Serializable ()> атрибут. У меня есть набор двоичных файлов на моем жестком диске, которые я сериализовал с помощью BinaryFormatter , полученного из экземпляров MyClass .

Недавно я изменил структуру ] MyClass немного (добавил некоторые свойства, удалил некоторые свойства, изменил несколько методов и т. Д.).

Что происходит, когда я пытаюсь десериализовать существующие объекты в этот измененный класс, используя приведенный ниже код? I ' я пробовал это и не получил ошибки или чего-то еще - но, конечно, он не может десериализоваться должным образом, когда класс изменился? Есть ли способ получить полезную информацию из сериализованных файлов, даже если я обновил класс?

Спасибо.


Вот код, который я использую для сериализации:

Public Sub serializeObject(ByVal obj As Object, ByVal outFilename As String)
    Dim fStream As FileStream
    Try
        fStream = New FileStream(outFilename, FileMode.Create)
        Dim bfmtr As New BinaryFormatter
        bfmtr.Serialize(fStream, obj)
        fStream.Close()
    Catch ex As Exception
        MsgBox("Failed to serialize: " & ex.Message)
        Throw
    End Try
End Sub

И сделать десериализация, которую я использую:

myObj = CType(deserializeObject("C:\myobject.bin"), MyClass))

Где deserializeObject - это:

Public Function deserializeObject(ByVal srcFilename As String) As Object
    If File.Exists(srcFilename) Then
        Dim fStream As Stream = File.OpenRead(srcFilename)
        Dim deserializer As New BinaryFormatter
        Dim returnObject As Object = deserializer.Deserialize(fStream)
        fStream.Close()
        Return returnObject
    Else
        Throw New ApplicationException("File not found: " & srcFilename)
    End If
End Function
7
задан Flash 14 May 2011 в 04:29
поделиться