- I auto-generated some classes using xsd.exe for a project I am working on.
- I am building an xml document using the auto-generated classes.
- A subset of the schema is very html-like and I am trying to bring raw HTML into my classes
- To that end, I’m trying to deserialize an HTML snippet into the class (not the root node) that corresponds to HTML in my document.
It sounds good in theory right? The problem is that my raw text wont deserialize. Am I doing something wrong? I have a lot of experience with XML and basic experience with the .NET XmlSerializer. The serializer doesn’t error, it just fails to deserialize the contents.
This is the code I am using to deserialize:
Dim FromValue As String = "<StrucDoc.Text><table><tr><td>Inside Text</td></tr></table></StrucDoc.Text>"
Dim ms As New IO.MemoryStream(Encoding.UTF8.GetBytes(FromValue))
Dim ToValue As HL7.V3.StrucDocText
Dim t As New System.Xml.Serialization.XmlSerializer(GetType(HL7.V3.StrucDocText))
ToValue = t.Deserialize(ms)
The is the important part of the auto-generated code… It’s very large:
'''<remarks/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(TypeName:="StrucDoc.Text", [Namespace]:="urn:hl7-org:v3")> _
Partial Public Class StrucDocText
Private itemsField() As Object
Private textField() As String
Private idField As String
Private languageField As String
Private styleCodeField As String
Private mediaTypeField As String
Public Sub New()
MyBase.New()
Me.mediaTypeField = "text/x-hl7-text+xml"
End Sub
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("br", GetType(StrucDocBr)), _
System.Xml.Serialization.XmlElementAttribute("content", GetType(StrucDocContent)), _
System.Xml.Serialization.XmlElementAttribute("footnote", GetType(StrucDocFootnote)), _
System.Xml.Serialization.XmlElementAttribute("footnoteRef", GetType(StrucDocFootnoteRef)), _
System.Xml.Serialization.XmlElementAttribute("linkHtml", GetType(StrucDocLinkHtml)), _
System.Xml.Serialization.XmlElementAttribute("list", GetType(StrucDocList)), _
System.Xml.Serialization.XmlElementAttribute("paragraph", GetType(StrucDocParagraph)), _
System.Xml.Serialization.XmlElementAttribute("renderMultiMedia", GetType(StrucDocRenderMultiMedia)), _
System.Xml.Serialization.XmlElementAttribute("sub", GetType(StrucDocSub)), _
System.Xml.Serialization.XmlElementAttribute("sup", GetType(StrucDocSup)), _
System.Xml.Serialization.XmlElementAttribute("table", GetType(StrucDocTable))> _
Public Property Items() As Object()
Get
Return Me.itemsField
End Get
Set(ByVal value As Object())
Me.itemsField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlTextAttribute()> _
Public Property Text() As String()
Get
Return Me.textField
End Get
Set(ByVal value As String())
Me.textField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute(DataType:="ID")> _
Public Property ID() As String
Get
Return Me.idField
End Get
Set(ByVal value As String)
Me.idField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute(DataType:="NMTOKEN")> _
Public Property language() As String
Get
Return Me.languageField
End Get
Set(ByVal value As String)
Me.languageField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute(DataType:="NMTOKENS")> _
Public Property styleCode() As String
Get
Return Me.styleCodeField
End Get
Set(ByVal value As String)
Me.styleCodeField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property mediaType() As String
Get
Return Me.mediaTypeField
End Get
Set(ByVal value As String)
Me.mediaTypeField = value
End Set
End Property
End Class
After execution, the ToValue.itemsField == null. I am expecting an array with one StrucDocTable element.
Any help would be appreciated.
Found the answer and I am sharing it for the sanity of all. I had two problems:
Added XML namespacing to the markup and the XmlSerializer construction.
After this, I get my values exactly as expected! I hope this helps someone out there!