Imports System.Xml.Serialization Imports System.IO Public Class Form1 Dim Liste As New Client Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'ajout des données Liste.Add(New Pack("test1", 1000, Now)) Liste.Add(New Pack("test2", 2000, Now)) Liste.Add(New Pack("test3", 3000, Now)) Liste.Add(New Pack("test4", 4000, Now)) 'ecriture : sérialisation de la classe client Dim FluxDeFichierWrite As FileStream = File.Create("Clients.xml") Dim Serialiseur As New XmlSerializer(GetType(Client)) Serialiseur.Serialize(FluxDeFichierWrite, Liste) FluxDeFichierWrite.Close() 'lecture : déserialisation de la classe client Dim FluxDeFichierRead As FileStream = File.Open("Clients.xml", FileMode.Open) Dim DeSerialiseur As New XmlSerializer(GetType(Client)) Liste = New Client Liste = CType(DeSerialiseur.Deserialize(FluxDeFichierRead), Client) FluxDeFichierRead.Close() 'affichage du pack 1 lu depuis Clients.xml MessageBox.Show(Liste.Packs(1).pNom & Environment.NewLine & _ Liste.Packs(1).pTaille & Environment.NewLine & _ Liste.Packs(1).pDate.ToString) End Sub Public Class Client Public Packs As New List(Of Pack) Sub Add() End Sub Sub Add(ByVal Packi As Pack) Packs.Add(Packi) End Sub End Class Public Class Pack Public Nom As String Public Taille As Integer Public sDate As Date Sub New() End Sub Sub New(ByVal nNom As String, ByVal nTaille As Integer, ByVal nDate As Date) Nom = nNom Taille = nTaille sDate = nDate End Sub ReadOnly Property pNom() As String Get Return Nom End Get End Property ReadOnly Property pTaille() As Integer Get Return Taille End Get End Property ReadOnly Property pDate() As Date Get Return sDate End Get End Property End Class End Class
Le problème avec ton code est que la variable "liste" est utilisée pour l'ajout de donnée ce qui empêche d'utiliser uniquement la partie dé sérialisation seule.
Dim FluxDeFichierRead As FileStream = File.Open("Clients.xml", FileMode.Open) Dim DeSerialiseur As New XmlSerializer(GetType(Client)) Dim MesDonnees As New Client MesDonnees = CType(DeSerialiseur.Deserialize(FluxDeFichierRead), Client) FluxDeFichierRead.Close()
Property pDate() As Date Set(ByVal value As Date) sDate = value End Set Get Return sDate End Get End Property
Liste.Packs(1).pDate = Now
Comment puis je dé-sérialiser un fichier xml dont je connais la structure ?
Imports System.Security.Permissions Imports System.Net Imports System.Xml.Serialization Imports System.IO Imports System.Xml Function telecharger(ByVal lien, ByVal chemin) Dim Client As Net.WebClient = New Net.WebClient Client.DownloadFileAsync(New Uri(lien), "." & chemin) End Function 'ACTIONS AU DEMARRAGE Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Etat.Text = " Bienvenue sur "..." & vbCrLf & "Vérification client en cours" 'téléchargement du xml telecharger("http://"lien URL"/clients.xml", ".\Clients.xml") 'lecture : déserialisation de la classe client Dim FluxDeFichierRead As FileStream = File.Open("Clients.xml", FileMode.Open) Dim DeSerialiseur As New XmlSerializer(GetType(Client)) Dim liste = New Client liste = CType(DeSerialiseur.Deserialize(FluxDeFichierRead), Client) FluxDeFichierRead.Close() 'affichage du pack 1 lu depuis Clients.xml MessageBox.Show(liste.Packs(0).pNom & Environment.NewLine & _ liste.Packs(0).pTaille & Environment.NewLine & _ liste.Packs(0).pDate.ToString) Public Class Client Public Packs As New List(Of Pack) Sub Add() End Sub Sub Add(ByVal Packi As Pack) Packs.Add(Packi) End Sub End Class Public Class Pack Public Nom As String Public Taille As Integer Public sDate As Date Sub New() End Sub Sub New(ByVal nNom As String, ByVal nTaille As Integer, ByVal nDate As Date) Nom = nNom Taille = nTaille sDate = nDate End Sub Property pNom() As String Set(ByVal value As String) Nom = value End Set Get Return Nom End Get End Property Property pTaille() As Integer Set(ByVal value As Integer) Taille = value End Set Get Return Taille End Get End Property Property pDate() As Date Set(ByVal value As Date) sDate = value End Set Get Return sDate End Get End Property End Class End Sub
Option Strict On Imports System.Security.Permissions Imports System.Net Imports System.Xml.Serialization Imports System.IO Imports System.Xml Public Class Form1 Dim Liste As Client 'ACTIONS AU DEMARRAGE Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load Etat.Text = " Bienvenue sur "..." & vbCrLf & "Vérification client en cours" 'téléchargement du xml My.Computer.Network.DownloadFile("http://blabla.com/Clients.xml", Application.StartupPath & "\Clients.xml", "", "", False, 100, True) 'lecture : déserialisation de la classe client Dim FluxDeFichierRead As FileStream = File.Open("Clients.xml", FileMode.Open) Dim DeSerialiseur As New XmlSerializer(GetType(Client)) Liste = New Client Liste = CType(DeSerialiseur.Deserialize(FluxDeFichierRead), Client) FluxDeFichierRead.Close() 'affichage du pack 1 lu depuis Clients.xml MessageBox.Show(Liste.Packs(0).pNom & Environment.NewLine & _ Liste.Packs(0).pTaille & Environment.NewLine & _ Liste.Packs(0).pDate.ToString) End Sub Public Class Client Public Packs As New List(Of Pack) Sub Add() End Sub Sub Add(ByVal Packi As Pack) Packs.Add(Packi) End Sub End Class Public Class Pack Public Nom As String Public Taille As Integer Public sDate As Date Sub New() End Sub Sub New(ByVal nNom As String, ByVal nTaille As Integer, ByVal nDate As Date) Nom = nNom Taille = nTaille sDate = nDate End Sub Property pNom() As String Set(ByVal value As String) Nom = value End Set Get Return Nom End Get End Property Property pTaille() As Integer Set(ByVal value As Integer) Taille = value End Set Get Return Taille End Get End Property Property pDate() As Date Set(ByVal value As Date) sDate = value End Set Get Return sDate End Get End Property End Class End Class