Generation of element attribute

Feb 29, 2012 at 2:27 PM

Hi

I generated the vb class with Xsd2Code and the attributes for an element are created like nodes in XML file.

------------------------ XSD

 <xs:element name="Emetteur">
  <xs:complexType>
   <xs:sequence>
    <xs:element minOccurs="1" maxOccurs="1" name="Employeurs">
     .....
    </xs:element>
   </xs:sequence>
   <xs:attribute name="NoEmployeurEmetteur" type="TypeNoEmployeurEmetteur" use="required" />
   <xs:attribute name="anneeTraitement" type="TypeAnnee" use="required" />
  </xs:complexType>
 </xs:element> 



-------------------------- Class VB

   Partial Public Class Emetteur
 
        Private employeursField As List(Of EmetteurEmployeur)
 
        Private noEmployeurEmetteurField As String
 
        Private anneeTraitementField As Short
 
        Private Shared sSerializer As System.Xml.Serialization.XmlSerializer
 
        Public Sub New()
            MyBase.New()
            Me.employeursField = New List(Of EmetteurEmployeur)()
        End Sub
 
        <System.Xml.Serialization.XmlArrayItemAttribute("Employeur", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable:=False)> _
        Public Property Employeurs() As List(Of EmetteurEmployeur)
            Get
                Return Me.employeursField
            End Get
            Set(value As List(Of EmetteurEmployeur))
                Me.employeursField = value
            End Set
        End Property
 
        Public Property NoEmployeurEmetteur() As String
            Get
                Return Me.noEmployeurEmetteurField
            End Get
            Set(value As String)
                Me.noEmployeurEmetteurField = value
            End Set
        End Property
 
        Public Property anneeTraitement() As Short
            Get
                Return Me.anneeTraitementField
            End Get
            Set(value As Short)
                Me.anneeTraitementField = value
            End Set
        End Property
 
        Private Shared ReadOnly Property Serializer() As System.Xml.Serialization.XmlSerializer
            Get
                If (sSerializer Is NothingThen
                    sSerializer = New System.Xml.Serialization.XmlSerializer(GetType(Emetteur))
                End If
                Return sSerializer
            End Get
        End Property
 
#Region "Serialize/Deserialize"
        '''<summary>
        '''Serializes current Emetteur object into an XML document
        '''</summary>
        '''<returns>string XML value</returns>
        Public Overridable Function Serialize() As String
            Dim streamReader As System.IO.StreamReader = Nothing
            Dim memoryStream As System.IO.MemoryStream = Nothing
            Try
                memoryStream = New System.IO.MemoryStream()
                Serializer.Serialize(memoryStream, Me)
                memoryStream.Seek(0, System.IO.SeekOrigin.Begin)
                streamReader = New System.IO.StreamReader(memoryStream)
                Return streamReader.ReadToEnd
            Finally
                If (Not (streamReader) Is NothingThen
                    streamReader.Dispose()
                End If
                If (Not (memoryStream) Is NothingThen
                    memoryStream.Dispose()
                End If
            End Try
        End Function
 
        '''<summary>
        '''Deserializes workflow markup into an Emetteur object
        '''</summary>
        '''<param name="xml">string workflow markup to deserialize</param>
        '''<param name="obj">Output Emetteur object</param>
        '''<param name="exception">output Exception value if deserialize failed</param>
        '''<returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
        Public Overloads Shared Function Deserialize(ByVal xml As StringByRef obj As EmetteurByRef exception As System.ExceptionAs Boolean
            exception = Nothing
            obj = CType(NothingEmetteur)
            Try
                obj = Deserialize(xml)
                Return True
            Catch ex As System.Exception
                exception = ex
                Return False
            End Try
        End Function
 
        Public Overloads Shared Function Deserialize(ByVal xml As StringByRef obj As EmetteurAs Boolean
            Dim exception As System.Exception = Nothing
            Return Deserialize(xml, obj, exception)
        End Function
 
        Public Overloads Shared Function Deserialize(ByVal xml As StringAs Emetteur
            Dim stringReader As System.IO.StringReader = Nothing
            Try
                stringReader = New System.IO.StringReader(xml)
                Return CType(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader)), Emetteur)
            Finally
                If (Not (stringReader) Is NothingThen
                    stringReader.Dispose()
                End If
            End Try
        End Function
 
        '''<summary>
        '''Serializes current Emetteur object into file
        '''</summary>
        '''<param name="fileName">full path of outupt xml file</param>
        '''<param name="exception">output Exception value if failed</param>
        '''<returns>true if can serialize and save into file; otherwise, false</returns>
        Public Overridable Overloads Function SaveToFile(ByVal fileName As StringByRef exception As System.ExceptionAs Boolean
            exception = Nothing
            Try
                SaveToFile(fileName)
                Return True
            Catch e As System.Exception
                exception = e
                Return False
            End Try
        End Function
 
        Public Overridable Overloads Sub SaveToFile(ByVal fileName As String)
            Dim streamWriter As System.IO.StreamWriter = Nothing
            Try
                Dim xmlString As String = Serialize()
                Dim xmlFile As System.IO.FileInfo = New System.IO.FileInfo(fileName)
                streamWriter = xmlFile.CreateText
                streamWriter.WriteLine(xmlString)
                streamWriter.Close()
            Finally
                If (Not (streamWriter) Is NothingThen
                    streamWriter.Dispose()
                End If
            End Try
        End Sub
 
        '''<summary>
        '''Deserializes xml markup from file into an Emetteur object
        '''</summary>
        '''<param name="fileName">string xml file to load and deserialize</param>
        '''<param name="obj">Output Emetteur object</param>
        '''<param name="exception">output Exception value if deserialize failed</param>
        '''<returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
        Public Overloads Shared Function LoadFromFile(ByVal fileName As StringByRef obj As EmetteurByRef exception As System.ExceptionAs Boolean
            exception = Nothing
            obj = CType(NothingEmetteur)
            Try
                obj = LoadFromFile(fileName)
                Return True
            Catch ex As System.Exception
                exception = ex
                Return False
            End Try
        End Function
 
        Public Overloads Shared Function LoadFromFile(ByVal fileName As StringByRef obj As EmetteurAs Boolean
            Dim exception As System.Exception = Nothing
            Return LoadFromFile(fileName, obj, exception)
        End Function
 
        Public Overloads Shared Function LoadFromFile(ByVal fileName As StringAs Emetteur
            Dim file As System.IO.FileStream = Nothing
            Dim sr As System.IO.StreamReader = Nothing
            Try
                file = New System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read)
                sr = New System.IO.StreamReader(file)
                Dim xmlString As String = sr.ReadToEnd
                sr.Close()
                file.Close()
                Return Deserialize(xmlString)
            Finally
                If (Not (file) Is NothingThen
                    file.Dispose()
                End If
                If (Not (sr) Is NothingThen
                    sr.Dispose()
                End If
            End Try
        End Function
#End Region
    End Class

----------------------------
I added the following lines of code for each attribute to vb class and then its correct.
        <System.Xml.Serialization.XmlAttribute("NoEmployeurEmetteur")> _
        Public Property NoEmployeurEmetteur() As String
            Get
                Return Me.noEmployeurEmetteurField
            End Get
            Set(value As String)
                Me.noEmployeurEmetteurField = value
            End Set
        End Property
 
        <System.Xml.Serialization.XmlAttribute("anneeTraitement")> _
        Public Property anneeTraitement() As Short
            Get
                Return Me.anneeTraitementField
            End Get
            Set(value As Short)
                Me.anneeTraitementField = value
            End Set
        End Property

What is the better way that Xsd2Code can generate the elements attribute like mine?

Thank you.
(Sorry my english)