Десериализация объекта внутри объекта - PullRequest
0 голосов
/ 07 декабря 2011

Возможно ли это?

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 как объект (я пытаюсь сделать процесс сериализации / десериализации общим, чтобы я мог просто копировать и вставлять и избегать явной установки каждой переменной)

1 Ответ

1 голос
/ 07 декабря 2011

Нет, в вашем случае вы хотите использовать функцию Load be Shared, которая возвращает вновь созданный элемент.

Больше похоже на:

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
...