IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Sérialisation et Déserialisation XML


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut Sérialisation et Déserialisation XML
    Bonjour à tous !

    Alors j'ai quelque problème. J'aimerai en fait sérialiser, déserialiser et récupérer mon fichier .xml à la racine de mon bin.

    Je n'ai pas d'erreur dans mon programme, il compile bien, mais je ne retrouve pas mon fichier .xml dans mon bin, il ne se passe rien. J'aimerai lorsque je clique sur valider que mon programme sérialise et donc créer un fichier .xml.

    Par contre dans un programme secondaire j'ai réussi à sérialiser et déserialiser des données. Après je lisais ma déserialisation dans une console.

    Alors voilà "une partie" de mon prog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Imports System
    Imports System.Collections.Generic
    Imports System.Text
    Imports System.Windows
    Imports System.Windows.Controls
    Imports System.Windows.Data
    Imports System.Windows.Documents
    Imports System.Windows.Input
    Imports System.Windows.Media
    Imports System.Xml.Serialization
    Imports System.Xml.Linq
    Imports System.IO
     
     
    ''' <summary>
    ''' Interaction logic for ModeMenu.xaml
    ''' </summary>
    Public Partial Class ModeMenu
    	Inherits UserControl
     
    	Event MainMenuButtonClicked(Index As Integer)
     
    	Public Shared ReadOnly CommandEscapeButton As New RoutedCommand()
    	Public Shared ReadOnly CommandValidateButton As New RoutedCommand()
     
    	Public Shared ReadOnly CommandUSBButton As New RoutedCommand()
    	Public Shared ReadOnly CommandBTButton As New RoutedCommand()
    	Public Shared ReadOnly CommandPermButton As New RoutedCommand()
    	Public Shared ReadOnly CommandInterButton As New RoutedCommand()
     
    	Public Sub New()
    		InitializeComponent()
    	End Sub
     
    	Private Sub CommandBinding_Executed (sender As Object, e As ExecutedRoutedEventArgs)
    		If (e.Command Is CommandUSBButton) Then
     
    		ElseIf (e.Command Is CommandBTButton) Then
     
    		ElseIf (e.Command Is CommandPermButton) Then
     
    		ElseIf (e.Command Is CommandInterButton) Then
     
    		End If
    	End Sub
     
    	Private Sub CommandBinding_Validate (ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    		RaiseEvent MainMenuButtonClicked(1)
    	End Sub
    	Private Sub CommandBinding_Escape (ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    		RaiseEvent MainMenuButtonClicked(0)
    	End Sub
    End Class
    Voici ce que j'ai rajouté afin de faire un "test" et cette partie fonctionne lorsqu'elle est seule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    '///////////////////// Exemple de sérialisation avec Id ////////////////////////////////////
     
    Public Class Test
    'Methods 	
    		Public Sub New()
    		End Sub
    'Properties		
    		Public Property Id() As Integer
    			Get
    				Return m_Id
    			End Get
    			Set
    				m_Id = Value
    			End Set
    		End Property
    'Déclarations		
    		Private m_Id As Integer
    End Class
     
     
     
    Public Class Program
     
    	Private Shared Sub Main(args As String())
     
    			Dim p As New Test() 
     
    			p.Id = 123
     
    			Dim xs As New XmlSerializer(GetType(Test))
    			Using wr As New StreamWriter("test.xml")
     
    				xs.Serialize(wr, p)
     
    			End Using
     
    		End Sub
    End Class
    Donc voilà ce que j'ai au total :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Public Partial Class ModeMenu
    	Inherits UserControl
     
    	Event MainMenuButtonClicked(Index As Integer)
     
    	Public Shared ReadOnly CommandEscapeButton As New RoutedCommand()
    	Public Shared ReadOnly CommandValidateButton As New RoutedCommand()
     
    	Public Shared ReadOnly CommandUSBButton As New RoutedCommand()
    	Public Shared ReadOnly CommandBTButton As New RoutedCommand()
    	Public Shared ReadOnly CommandPermButton As New RoutedCommand()
    	Public Shared ReadOnly CommandInterButton As New RoutedCommand()
     
    	Public Sub New()
    		InitializeComponent()
    	End Sub
     
    	Private Sub CommandBinding_Executed (sender As Object, e As ExecutedRoutedEventArgs)
    		If (e.Command Is CommandUSBButton) Then
     
    		ElseIf (e.Command Is CommandBTButton) Then
     
    		ElseIf (e.Command Is CommandPermButton) Then
     
    		ElseIf (e.Command Is CommandInterButton) Then
     
    		End If
    	End Sub
     
    	Private Sub CommandBinding_Validate (ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    		RaiseEvent MainMenuButtonClicked(1)
    	End Sub
    	Private Sub CommandBinding_Escape (ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    		RaiseEvent MainMenuButtonClicked(0)
    	End Sub
    End Class
     
    '///////////////////// Exemple de sérialisation avec Id ////////////////////////////////////
     
    Public Class Test
    'Methods 	
    		Public Sub New()
    		End Sub
    'Properties		
    		Public Property Id() As Integer
    			Get
    				Return m_Id
    			End Get
    			Set
    				m_Id = Value
    			End Set
    		End Property
    'Déclarations		
    		Private m_Id As Integer
    End Class
     
     
     
    Public Class Program
     
    	Private Shared Sub Main(args As String())
     
    			Dim p As New Test() 
     
    			p.Id = 123
     
    			Dim xs As New XmlSerializer(GetType(Test))
    			Using wr As New StreamWriter("test.xml")
     
    				xs.Serialize(wr, p)
     
    			End Using
     
    		End Sub
    End Class
    Quelqu'un peut-il m'aider Svp ??

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut
    Alors j'ai réussi, en fait je ne faisais pas appel à ma fonction et mon main était en private mais mon xml ce créer trop tôt...

    voici ce que j'ai rajouté dans mon public sub new():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	Public Sub New()
    		InitializeComponent()
    		call Program.Main2
    	End Sub
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Shared Sub Main2
    Maintenant il faudrait que je puisse créer ce fichier lorsque je le souhaite et non pas lorsque je lance l'appli. Je sais que je fais appel de ma fonction serialize dans un public sub new donc forcement ça se lance au démarrage...

    Mais comment faire alors ?

  3. #3
    Membre chevronné Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 339
    Par défaut
    Salut,
    J'ai découvert la serialization XML avec les classes grâce à ce post de Wallace.
    Cela fonctionne à merveille et c'est d'une simplicité déconcertante par rapport aux autres outils XMl comme Vakos que j'utilisais auparavant.

    Ensuite, à toi d'adapter en appelant ton constructeur au moment opportun.

    A plus.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut
    Maintenant il faudrait que je puisse créer ce fichier lorsque je le souhaite et non pas lorsque je lance l'appli. Je sais que je fais appel de ma fonction serialize dans un public sub new donc forcement ça se lance au démarrage...
    Je pense que si je fais l'appel ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandBinding_Validate (ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    		RaiseEvent MainMenuButtonClicked(1)
    		call Program.Main2
    	End Sub
    ça devrait fonctionner, je vais tenter.

    J'ai découvert la serialization XML avec les classes grâce à ce post de Wallace.
    Merci pour ta réponse je vais étudier ça de plus près !

  5. #5
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    bonjour,

    Tu ne serialises/deserialises rien du tout puisque tes classes ne sont pas decorés avec l attribut "Serializable"

    ++

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut
    Tu ne serialises/deserialises rien du tout puisque tes classes ne sont pas decorés avec l attribut "Serialize"
    Merci pour la réponse, effectivement pas de sérialisation mais du coup que dois-je faire ? Lorsque tu dis décorer tu parles de ça "<Serializable>"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD20] Dé-sérialisation Json ou Xml
    Par tunizar dans le forum WinDev
    Réponses: 0
    Dernier message: 14/04/2016, 16h26
  2. Réponses: 3
    Dernier message: 31/07/2012, 15h50
  3. Réponses: 4
    Dernier message: 02/12/2008, 12h00
  4. Sérialiser Object en XML Recursif
    Par Soulama dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 27/05/2008, 14h06
  5. Sérialisation / déserialisation XML
    Par soumamort dans le forum Windows Forms
    Réponses: 5
    Dernier message: 16/04/2008, 17h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo