Duke49
Messages postés552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention16 août 2024
-
23 mars 2012 à 23:40
Duke49
Messages postés552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention16 août 2024
-
24 mars 2012 à 20:20
Chalut
Je ne sais pas si c'est normal... je n'ai pas de SoapFormatter dans mon Framework 4.
Je cherche donc a réaliser une serialisation avec Xmlserializer car mon objectif c'est de sauvegarder une class sur le disque et de la restaurer.
Dans mon projet je vais avoir plusieurs class a sauvegarder et donc je ne souhaite pas faire une fonction Serialize/Deserialize pour chaque class.
Voila la class a sauvegarder:
Namespace MainDocuments
Public Class DefaultDirectory
<System.Serializable()>
Public Class Memory
Private Shared mDirectory As String
Shared Property Directory As String
Get
Return mDirectory
End Get
Set(ByVal value As String)
mDirectory = value
End Set
End Property
End Class
Sub New()
DefaultDirectory.Memory.Directory = Nothing
End Sub
End Class
End Namespace
Voici ma fonction pour sauvegarder:
Public Sub SaveDefault(ByVal SourceClass As Type, ByVal DestinationFile As String)
Dim fStream As New FileStream(DestinationFile, FileMode.Create)
Dim mySoap As New Xml.Serialization.XmlSerializer(SourceClass)
Try
mySoap.Serialize(fStream, SourceClass)
Catch ex As Exception
MessageBox.Show(ex.ToString & Environment.NewLine & SourceClass.ToString & Environment.NewLine & DestinationFile, "SaveDefault", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
fStream.Close()
End Try
End Sub
Et enfin mon bouton:
Private Sub But_DocumentsSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles But_DocumentsSave.Click
MainPaths.Serialisation.SaveDefault(MainDocuments.DefaultDirectory.Memory, MainPaths.Application.SaveDocumentsFullPath)
End Sub
Le code fonctionne pas.
Pour faire passer mes paramètres sur le bouton il demande un TYPE et non un objet.
XmlSerializer adore la chose puisqu'il lui faut un type.
Mon Serialize le prend même si il attend un objet.
Comment faire une fonction unique pour Serializer et Deserializer qui prend le nom d'une class en paramètre ?
Le top:
Public Sub SaveDefault(ByVal SourceClass As Class, ByVal DestinationFile As String)
Duke49
Messages postés552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention16 août 20244 24 mars 2012 à 12:02
Duke49 on ne peut pas serializer toutes les variables contenues dans une class.
Il faut que tu baragouine en prenant tes valeurs en utilisant une Hashtable !!!
Exemple:
<System.Serializable()>
Public Class DefaultDirectory
Public Shared mDirectory As New Hashtable
Sub New()
DefaultDirectory.mDirectory.Add("mDirectory", Nothing)
End Sub
Protected Overrides Sub Finalize()
mDirectory.Clear()
MyBase.Finalize()
End Sub
End Class
Public Module Serialisation
Public Sub SaveDefault(ByVal Sources As Hashtable, ByVal DestinationFile As String)
Dim fStream As New FileStream(DestinationFile, FileMode.Create)
Dim binFormat As New BinaryFormatter
Try
binFormat.Serialize(fStream, Sources)
Catch ex As Exception
MessageBox.Show(ex.ToString & Environment.NewLine & Environment.NewLine & DestinationClass.ToString & Environment.NewLine & SourceFile, "SaveDefault", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
fStream.Close()
End Try
End Sub
Public Sub RestoreDefault(ByRef DestinationClass As Hashtable, ByVal SourceFile As String)
Dim fStream As FileStream
Dim binFormat As New BinaryFormatter
If File.Exists(SourceFile) Then
fStream = New FileStream(SourceFile, FileMode.Open)
Try
DestinationClass = binFormat.Deserialize(fStream)
Catch ex As Exception
MessageBox.Show(ex.ToString & Environment.NewLine & Environment.NewLine & DestinationClass.ToString & Environment.NewLine & SourceFile, "RestoreDefault", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
fStream.Close()
End Try
End If
End Sub
End Module
Private Sub But_DocumentsSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles But_DocumentsSave.Click
Dim mDic As New Hashtable
mDic = MainDocuments.DefaultDirectory.mDirectory
MainPaths.Serialisation.SaveDefault(mDic, MainPaths.Application.SaveDocumentsFullPath)
mDic.Clear()
End Sub
Private Sub But_DocumentsRestore_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles But_DocumentsRestore.Click
Dim mDic As New Hashtable
mDic = MainDocuments.DefaultDirectory.mDirectory
MainPaths.Serialisation.RestoreDefault(mDic, MainPaths.Application.SaveDocumentsFullPath)
Me.Txt_DocumentsDirectory.Text = mDic.Item("mDirectory")
mDic.Clear()
End Sub