Désérialiser collection généric VB.NET (xml)

Fermé
milou43 Messages postés 13 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 2 juin 2011 - 19 mai 2011 à 16:22
milou43 Messages postés 13 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 2 juin 2011 - 2 juin 2011 à 10:44
Bonjour,

Je débute dans les collections en VB.NET.
J'essaie de programmer en vb.net le cas NETCAR (étude de cas du bts ig 2003) pour ceux qui connaissent.

Lien pour télécharger le cas et avoir plus d'informations (diagramme de classe, détail des classes) :
http://www.reseaucerta.org/sujets/matiere.php?pageNum_pubs=1&totalRows_pubs=29&c=0&f=5&m=8

Je voudrais désérialiser la collection de véhicule qui est dans mon fichier Vehicule.xml pour mettre celle-ci dans ma collection qui est dans la classe Atelier (_lesVéhicules).
Mais avec le code que je vous ai fourni plus bas une erreur s'affiche lors de la désérialisation : "l'exception nullreferenceexception n'a pas été gérée
La référence d'objet n'est pas définie à une instance d'un objet."

Classe Atelier :
Imports System.Xml.Serialization
Imports System.Collections.Generic

<Serializable()> Public Class Atelier

Private _lesTypesExistants As New List(Of EntretienType)
Private _lesVehicules As New List(Of Vehicule)

Public Sub New()
_lesVehicules = New List(Of Vehicule)
_lesTypesExistants = New List(Of EntretienType)
End Sub

Public Property lesVehicules() As List(Of Vehicule)
Get
Return _lesVehicules
End Get
Set(ByVal value As List(Of Vehicule))
_lesVehicules = value
End Set
End Property

End Class


Classe Vehicule :
Imports System.IO
Imports System.Xml.Serialization
Imports System.Collections.Generic


<Serializable()> Public Class Vehicule

Private _numImma As String
Private _nbKmActuel As Integer


Sub New()

End Sub

Sub New(ByVal unNumImma As String, ByVal unNbKmActuel As Integer)
_numImma = unNumImma
_nbKmActuel = unNbKmActuel
End Sub

Public Property numImma() As String
Get
Return _numImma
End Get
Set(ByVal value As String)
_numImma = value
End Set
End Property

Public Property nbKmActuel() As Integer
Get
Return _nbKmActuel
End Get
Set(ByVal value As Integer)
_nbKmActuel = value
End Set
End Property

End Class


Form1:
Public Class Form1

Private vehicule As Vehicule
Private atelier As Atelier

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim atelier As New Atelier()

Charger()

DGV_Vehicule()

End Sub

Sub Charger()
If File.Exists("Vehicule.xml") Then
Dim FluxDeFichier As Stream = File.OpenRead("Vehicule.xml")
Dim Deserialiseur As New XmlSerializer(GetType(List(Of Vehicule)))
atelier.lesVehicules = Deserialiseur.Deserialize(FluxDeFichier)
FluxDeFichier.Close()
End If
End Sub

Fichier Vehicule.xml :
<?xml version="1.0"?>
<ArrayOfVehicule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Vehicule>
<numImma>Avatar69</numImma>
<nbKmActuel>2009</nbKmActuel>
</Vehicule>
<Vehicule>
<numImma>2725KD43</numImma>
<nbKmActuel>220500</nbKmActuel>
</Vehicule>
<Vehicule>
<numImma>5609JK69</numImma>
<nbKmActuel>54000</nbKmActuel>
</Vehicule>
</ArrayOfVehicule>


Merci d'avance.
A voir également:

1 réponse

milou43 Messages postés 13 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 2 juin 2011
2 juin 2011 à 10:44
J'ai trouvé si ça intéresse quelqu'un il fallait remplacer :
Dim atelier As New Atelier()
par :
atelier = New Atelier
0