Bonjour à tous.
Je cherche à sérialiser une classe contenant une liste de classes :
Classe Voiture :
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
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
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 <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
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
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
Ce qui me convient parfaitement.
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>
Cependant, lorsque je sérialise la classe Voitures, j'obtiens :
Les données des voitures ne sortent pas.
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" />
Je sèche. Je ne trouve pas où est mon erreur.
Un coup de main, s'il vous please...
Partager