当基础类稍微改变时,我可以反序列化对象吗?

Fla*_*ash 7 vb.net serialization visual-studio-2010 binaryformatter deserialization

我写了一个自定义类MyClass并用<Serializable()>属性标记它.我在我的硬盘驱动器上有一组二进制文件,我使用BinaryFormatter来自实例的序列化MyClass.

我最近MyClass稍微改变了结构(添加了一些属性,删除了一些属性,改变了一些方法等).

当我尝试使用下面的代码将现有对象反序列化为此更改的类时会发生什么?我已经尝试了它并没有抛出错误或任何东西 - 但是当类改变时它肯定无法正确反序列化?有没有办法可以从序列化文件中获取一些有用的信息,即使我已经更新了这个类?

谢谢.


这是我用来进行序列化的代码:

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
Run Code Online (Sandbox Code Playgroud)

并且我正在使用反序列化:

myObj = CType(deserializeObject("C:\myobject.bin"), MyClass))
Run Code Online (Sandbox Code Playgroud)

在哪里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
Run Code Online (Sandbox Code Playgroud)

Dan*_*dor 0

添加和删​​除字段不应该有任何问题 - 我有经验证明,但我不知道序列化的详细工作原理。

更改私有属性的名称时可能会遇到问题。所有其他事情,甚至重新排序字段,你都很酷。

  • 这是二进制序列化。当您引用 XML 序列化时,您是正确的,但如果在序列化后从对象中删除属性,则二进制序列化将在反序列化时失败。 (2认同)