反序列化对象内的对象

时间:2011-12-06 22:35:19

标签: vb.net serialization .net-2.0

这可能吗?

Public Class Foo
    public var as string

    public sub Load(byval filename as string)
        'This is done
        [...]
        oItem = [...] 'Code to deserialize

        me = oItem 'THIS LINE
    end sub
end class

这样你就可以从序列化文件加载foo,如下所示:

Public Sub Main
    Dim f as Foo = new Foo()
    f.load("myFile")
end sub

到目前为止,我已经有了一个将Foo作为Object返回的函数(我正在尝试使序列化/反序列化过程一般,所以我可以复制并粘贴并避免显式设置每个变量)

1 个答案:

答案 0 :(得分:1)

不,你想要做的是让Load成为一个返回新创建项目的共享函数。

更像是:

Public Class Foo
    public var as string

    public Shared Function Load(byval filename as string) As Foo
        'This is done
        [...]
        oItem = [...] 'Code to deserialize

        Return oItem
    end sub
end class

Public Sub Main
    Dim f as Foo
    f = Foo.load("myFile")
end sub

此外,您可以使用通用方法,而不是直接将反序列化嵌入到每个类中,例如:

''' <summary>
''' This method is used to deserialize an object from a file that was serialized using the SoapFormatter
''' </summary>
''' <param name="sFileName"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Deserialize(Of T)(ByVal sFileName As String) As T
    ' Exceptions are handled by the caller

    Using oStream As Stream = File.Open(sFileName, FileMode.Open, IO.FileAccess.Read)
        If oStream IsNot Nothing Then
            Return DirectCast((New SoapFormatter).Deserialize(oStream), T)
        End If
    End Using

    Return Nothing
End Function

然后您可以将其称为:

Public Sub Main
    Dim f as Foo
    f = Deserialize(Of Foo)("myFile")
end sub