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 :

Problème de sérialisation XML


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur SAP
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur SAP

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème de sérialisation XML
    Bonjour à tous.

    Je cherche à sérialiser une classe contenant une liste de classes :

    Classe Voiture :
    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
     
    <Serializable()>
    Public Class Voiture
     
        Private _marque As String
        Private _modele As String
     
        Public Sub New()
     
        End Sub
     
        Public Sub New(ByVal marque As String, ByVal modele As String)
            _marque = marque
            _modele = modele
        End Sub
     
        Public Property Marque As String
            Get
                Return _marque
            End Get
            Set(ByVal value As String)
                _marque = value
            End Set
        End Property
     
        Public Property Modele As String
            Get
                Return _modele
            End Get
            Set(ByVal value As String)
                _modele = value
            End Set
        End Property
     
    End Class
    Classe Voitures :
    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
     
    <Serializable()>
    Public Class Voitures
     
        Private _lst As List(Of Voiture)
     
        Public Sub New()
            _lst = New List(Of Voiture)
        End Sub
     
        Public Function Nombre() As Integer
            Return _lst.Count
        End Function
     
        Public Sub Add(ByVal V As Voiture)
            _lst.Add(V)
        End Sub
     
        Public Function uneVoiture(ByVal index As Integer) As Voiture
            If index < _lst.Count Then
                Return _lst.Item(index)
            End If
            Return Nothing
        End Function
     
    End Class
    Code du form :
    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
     
    Imports System.IO
    Imports System.Xml.Serialization
     
    Public Class Form1
     
        Private _lstVoitures As Voitures
        Private _V As Voiture
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            _lstVoitures = New Voitures
            _lstVoitures.Add(New Voiture("Peugeot", "205"))
            _lstVoitures.Add(New Voiture("Peugeot", "405"))
            _lstVoitures.Add(New Voiture("Renault", "Laguna"))
     
            Try
                Me.Save(Of Voitures)(_lstVoitures, My.Application.Info.DirectoryPath & "\voitures.xml")
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
     
            _V = New Voiture("Renault", "Laguna")
     
            Try
                Me.Save(Of Voiture)(_V, My.Application.Info.DirectoryPath & "\voiture.xml")
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
     
        End Sub
     
        Private Sub Save(Of T)(ByVal tObject As T, ByVal strFilename As String)
            Try
                Dim objSW As New StreamWriter(strFilename, False, System.Text.Encoding.Default)
                objSW.Write(Me.Serialize(Of T)(tObject))
                objSW.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
     
        Private Function Serialize(Of T)(ByVal lst As T) As String
            Try
                Dim objXS As New XmlSerializer(GetType(T))
                Dim objSW As New StringWriter
                objXS.Serialize(objSW, lst)
                Return objSW.ToString()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            Return Nothing
        End Function
     
    End Class
    Lorsque je sérialise la classe Voiture, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="utf-16"?>
    <Voiture xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Marque>Renault</Marque>
      <Modele>Laguna</Modele>
    </Voiture>
    Ce qui me convient parfaitement.

    Cependant, lorsque je sérialise la classe Voitures, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?xml version="1.0"?>
    <articles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    Les données des voitures ne sortent pas.
    Je sèche. Je ne trouve pas où est mon erreur.

    Un coup de main, s'il vous please...

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Ta List(Of Voiture) est private. Et le XMLserializer ne prend que les propriétés publiques.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur SAP
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur SAP

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    En effet. Ça marche mieux.

    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/03/2011, 10h56
  2. Problème de sérialisation XML
    Par loicounet dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 04/09/2009, 09h52
  3. problème de sérialisation xml
    Par Pol63 dans le forum VB.NET
    Réponses: 0
    Dernier message: 26/02/2009, 17h32
  4. Problème de sérialisation XML d'une Array
    Par Abakai dans le forum C#
    Réponses: 3
    Dernier message: 21/05/2007, 15h30
  5. Problème sérialisation XML [C#]
    Par AlphonseBrown dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/04/2006, 22h58

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