2011-12-03 11 views
0
  1. 私が作業しているプロジェクトでxsd.exeを使用していくつかのクラスを自動生成しました。
  2. 私は、自動生成クラスを使用してxmlドキュメントを構築しています。
  3. スキーマのサブセットは非常にhtmlのようなもので、生のHTMLを自分のクラスに持ってきています
  4. そのために、私の文書のHTMLに対応しています。

理論的にはうまく聞こえますか?問題は、私の原文は逆直列化されていないということです。私は何か間違っているのですか? XMLに関する豊富な経験と、.NET XmlSerializerに関する基本的な経験があります。シリアライザはエラーにはならず、内容をデシリアライズできません。.NET XmlSerializerはXmlElementAttributeオブジェクト配列を逆シリアル化しません

これは私がデシリアライズするために使用していたコードです:

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) 

ザ・はそれが非常に大きいです...自動生成されたコードの重要な部分である:実行後

'''<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 

ToValue.itemsField == null。 1つの配列が1つのStrucDocTable要素を持つと期待しています。

ご協力いただければ幸いです。

+0

XMLのサンプルを投稿してください。 –

答えて

0

答えを見つけて、私はすべての正気のためにそれを共有しています。私は2つの問題がありました:

  1. htmlは、目的の構造で正確にフォーマットされています。私はtbodyをHTMLに追加しました。
  2. マークアップとXmlSerializer構造にXML名前空間を追加しました。この後

    Dim FromValue As String = "<StrucDoc.Text xmlns=""urn:hl7-org:v3""><table><tbody><tr><td>Inside Text</td></tr></tbody></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), "urn:hl7-org:v3") 
    ToValue = t.Deserialize(ms) 
    

、私は期待どおりに私の値を取得!私はこれが誰かを助けることを願っています!

関連する問題