Click here to Skip to main content
15,889,931 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Hi everybody,
I want to know why i get de last value in a collection of data. I made the serialization in an object which is composed by two members. Here is the code

VB
Imports System.Xml.Serialization
'<XmlRoot("AuditLogiciel")> 
<serializable()>
Public Class DataAcquisition
    Public Sub New()
        ' Rien à faire.
    End Sub
#Region "Déclaration"
    Public DateData As Date
    Public MesureCapteur As String
 
#End Region
 
#Region "Propiétés"
 
    '<XmlAttribute("Dates")>
    Public Property Dates() As Date
        Get
            Return DateData
        End Get
        Set(ByVal value As Date)
            DateData = value
 
        End Set
    End Property
    ' <XmlAttribute("CapteurMesure")>
    Public Property CapteurMesure() As String
        Get
            Return MesureCapteur
        End Get
        Set(ByVal value As String)
            MesureCapteur = value
 
        End Set
    End Property
 
#End Region
 
#Region "Métodes"
 
  
#End Region
 

End Class


In another class:

VB
Private Sub MainWindow_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing


        Dim xSerializer As XmlSerializer = New XmlSerializer(GetType(DataAcquisition))
        Dim writer As TextWriter = New StreamWriter("nomFichierConfigXml.XML")
        xSerializer.Serialize(writer, Config)
        writer.Close()

    End Sub


The property Dates is fill with many information. Son when i made the serialisation, i get just de last value of that information within Dates.

Here is the result:
XML
<?xml version="1.0" encoding="UTF-8"?>
-<DataMesuresCapteur xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">-<AcquisiMesur>-<DataAcquisition><Dates>2013-09-23T17:25:35</Dates><CapteurMesure>0,4</CapteurMesure></DataAcquisition>-<DataAcquisition><Dates>2013-09-23T17:25:35</Dates><CapteurMesure>0,4</CapteurMesure></DataAcquisition>-<DataAcquisition><Dates>2013-09-23T17:25:35</Dates><CapteurMesure>0,4</CapteurMesure></DataAcquisition>-<DataAcquisition><Dates>2013-09-23T17:25:35</Dates><CapteurMesure>0,4</CapteurMesure></DataAcquisition>-<DataAcquisition><Dates>2013-09-23T17:25:35</Dates><CapteurMesure>0,4</CapteurMesure></DataAcquisition>-<DataAcquisition><Dates>2013-09-23T17:25:35</Dates><CapteurMesure>0,4</CapteurMesure></DataAcquisition>

As you can see is always the same value (the last value of my dates).
Note: Dates is fill with many values.

Why i get just one value and not ALL VALUES.


Thanks
Posted
Updated 23-Sep-13 5:29am
v2
Comments
Sergey Alexandrovich Kryukov 23-Sep-13 12:34pm    
You did not show how Config is obtained, but you just have the data your created.
—SA
[no name] 23-Sep-13 13:57pm    
You are getting that one single value because that is all that your class contains. Your class defines Dates as a single DateTime not as an array or collection of dates.

1 solution

You have to serialize a collection of object not only one instance (Config in your case)

Try this :

VB
'<XmlRoot("AuditLogiciel")>
<Serializable()>
Public Class DataAcquisition
    <NonSerialized()>
    Public Shared List As List(Of DataAcquisition) = New List(Of DataAcquisition)
    Public Sub New()
        ' Rien à faire.
        List.Add(Me)
    End Sub
#Region "Déclaration"
    Public DateData As Date
    Public MesureCapteur As String

#End Region

#Region "Propiétés"
     '<XmlAttribute("Dates")>
    Public Property Dates() As Date
        Get
            Return DateData
        End Get
        Set(ByVal value As Date)
            DateData = value

        End Set
    End Property
    ' <XmlAttribute("CapteurMesure")>
    Public Property CapteurMesure() As String
        Get
            Return MesureCapteur
        End Get
        Set(ByVal value As String)
            MesureCapteur = value

        End Set
    End Property

#End Region

#Region "Métodes"
 
#End Region


End Class



VB
Dim test As DataAcquisition = New DataAcquisition() With {.CapteurMesure = "5", .Dates = Date.Now}
   Dim test2 As DataAcquisition = New DataAcquisition() With {.CapteurMesure = "7", .Dates = Date.Today}
   Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
       Dim xSerializer As XmlSerializer = New XmlSerializer(GetType(List(Of DataAcquisition)))
       Dim writer As TextWriter = New StreamWriter("nomFichierConfigXml.XML")
       xSerializer.Serialize(writer, DataAcquisition.List)
       writer.Close()
   End Sub
 
Share this answer
 
v3

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900