Первый раз запускаю, сохраняется и все поля с правильными значениями, второй раз запускаю - при десериализации поля нулевые, но никаких ошибок или исключений при этом не выдается.
Форма
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MessageBox.Show(Settings.General.RunTime.ToString)
End Sub
End Class
Глобальный модуль
Module Main
Public Settings As New clsSettings
Public Class Securiry
Public Shared Function AES_StringEncrypt(ByVal input As String, ByVal pass As String) As String
'...
End Function
Public Shared Function AES_StringDecrypt(ByVal input As String, ByVal pass As String) As String
'...
End Function
End Class
Public Class HideMembers
Public Shared Sub LoadSettings(ByVal pFile As String)
Dim FilePath As String = pFile
Using FS As New IO.FileStream(FilePath, IO.FileMode.Open, IO.FileAccess.Read)
Dim BF As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
Settings = DirectCast(BF.Deserialize(FS), clsSettings)
'FS.Close()
End Using
End Sub
End Class
End Module
Класс, который сериализую и обратно
<Serializable> _
Public Class clsSettings
<NonSerialized> Private GeneralFileName As String = "Data.bin"
<NonSerialized> Private Dir As String = My.Application.Info.DirectoryPath & "\"
<NonSerialized> Private FilePath As String = Dir & GeneralFileName
Public Sub New()
'Грузим настройки
If IO.File.Exists(FilePath) Then
Load()
Else
General.RunTime = New Date(2013I, 12I, 1I, 7I, 0I, 0I)
Dim Dir As String = My.Computer.FileSystem.CurrentDirectory
General.PlatformFolder = New IO.FileInfo(Dir)
BaseParameters.BaseLocation = New IO.FileInfo(Dir)
BaseParameters.User = ""
BaseParameters.Password = ""
Save()
End If
End Sub
Friend General As New clsGeneral()
<Serializable, System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> _
Friend Class clsGeneral
Public RunTime As Date
Public PlatformFolder As IO.FileInfo
Public Sub New()
End Sub
End Class
Friend BaseParameters As New clsBaseParameters()
<Serializable, System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> _
Friend Class clsBaseParameters
Public BaseLocation As IO.FileInfo
Public User As String
Private fPassword As String
Public Sub New()
End Sub
Public Property Password As String
Get
If fPassword = "" Then
Return ""
Else
Return Main.Securiry.AES_StringDecrypt(fPassword, User)
End If
End Get
Set(value As String)
If value = "" Then
fPassword = ""
Else
fPassword = Main.Securiry.AES_StringEncrypt(fPassword, User)
End If
End Set
End Property
End Class
Public Sub Save()
Try
Using FS As New IO.FileStream(FilePath, IO.FileMode.Create, IO.FileAccess.Write)
Dim BF As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
BF.Serialize(FS, Me)
'FS.Close()
End Using
Catch ex As Exception
MessageBox.Show("Возникла ошибка при сохранении!")
End Try
End Sub
Public Sub Load()
Main.HideMembers.LoadSettings(FilePath)
End Sub
End Class
Вобщем попытался сделать как из примера с MSDN "Basic serialization" но где именно ошибка не могу отследить. Кто сталкивался, где ошибка? Может не нужно так усложнять класс?
P.S. Приму любую критику с пояснением.
Ответить
|