Hi guys,
I'm having trouble with serialization especially of array elements!
What I have is an array of clsUsers which have various properties as
shown in the code below
The XML I want to achieve is shown at the top and underneath that is
the xml i have achieved.... any help you can provide would be most
helpful!
Dave.
Code to Follow:
----------------------------------------------------------------
'''------Need to Achieve-------
'''<user_profiles>
''' <user>
''' <uid val="1" />
''' <username val="Dave" />
''' <password val="test" />
''' <level val="1" />
''' </user>
''' <user>
''' .
''' .
''' </user>
''' etc.
'''</user_profiles>
'''---------Actually Achieve--------
'''<ArrayOfClsUser>
''' <clsUser>
''' <username>1</username>
''' <uid>1</uid>
''' <password>1</password>
''' <level>OPERATOR</level>
''' </clsUser>
''' <clsUser>
''' <username>2</username>
''' <uid>2</uid>
''' <password>2</password>
''' <level>OPERATOR</level>
''' </clsUser>
''' etc.
'''</ArrayOfClsUser>
Imports System.Xml
Imports System.Xml.Serialization
'<XmlRoot(ElementName:="user_profiles", DataType:="anyURI",
IsNullable:=False, Namespace:="")> _
Public Class clsUserTable
<XmlElement(ElementName:="user_profiles")> _
Public allUsers As clsUser()
Private serializer As XmlSerializer
Private Sub SerializeUsers()
serializer = New XmlSerializer(allUsers.GetType())
Dim ns As New XmlSerializerNamespaces
ns.Add("", "")
Dim sb As New System.Text.StringBuilder
Dim tr As New XmlTextWriterFormattedNoDeclaration(New
IO.StringWriter(sb))
serializer.Serialize(tr, allUsers, ns)
Console.WriteLine(sb.ToString())
End Sub
Private Sub DeserializeUsers()
serializer = New XmlSerializer(Me.GetType())
Dim o As Object = serializer.Deserialize(New
IO.FileStream(Application.StartupPath & "\XMLData\xmlUsers.xml",
IO.FileMode.Open))
Dim t As clsUserTable = CType(o, clsUserTable)
allUsers = t.allUsers
End Sub
Private Class XmlTextWriterFormattedNoDeclaration
Inherits System.Xml.XmlTextWriter
Public Sub New(ByVal w As System.IO.TextWriter)
MyBase.New(w)
Formatting = System.Xml.Formatting.Indented
End Sub
Public Overloads Overrides Sub WriteStartDocument()
End Sub
End Class
End Class
'<XmlRoot(ElementName:="user")> _
Public Class clsUser
<XmlElement(ElementName:="username")> _
Public _username As String
<XmlElement(ElementName:="uid")> _
Public _UserIndex As Integer
<XmlElement(ElementName:="password")> _
Public _password As String
<XmlIgnore()> _
Public _Status As enumStatusLevel
<XmlElement(ElementName:="level")> _
Public _Oplevel As enumOperatorLevel
<XmlIgnore()> _
Public Property UserName() As String
Get
Return _username
End Get
Set(ByVal Value As String)
_username = Value
End Set
End Property
<XmlIgnore()> _
Public Property UserIndex() As Integer
Get
Return _UserIndex
End Get
Set(ByVal Value As Integer)
_UserIndex = Value
End Set
End Property
<XmlIgnore()> _
Public Property Password() As String
Get
Return _password
End Get
Set(ByVal Value As String)
_password = Value
End Set
End Property
<XmlIgnore()> _
Public Property OpLevel() As enumOperatorLevel
Get
Return _Oplevel
End Get
Set(ByVal Value As enumOperatorLevel)
_Oplevel = Value
End Set
End Property
<XmlIgnore()> _
Public Property Status() As enumStatusLevel
Get
Return _Status
End Get
Set(ByVal Value As enumStatusLevel)
_Status = Value
End Set
End Property
Public Overrides Function ToString() As String
Return UserName
End Function
Public Enum enumOperatorLevel
SUPERVISOR = 1
OPERATOR = 0
End Enum
Public Enum enumStatusLevel
ACTIVE = 0
INACTIVE = 1
End Enum
End Class