2009-06-08 134 views
1

我有一個XML文檔,其中包含來自2個XML模式的類型。其中一個(theirs.xsd)是我正在與之集成(並且無法編輯)的專有架構。爲此,我定義了我自己的類型(mine.xsd),它是'any'元素中的一個元素是專有類型。將XML反序列化爲多個模式中定義的對象

我使用Visual Studio的xsd.exe從模式生成C#類。但是,專有類型中的'any'元素生成爲XmlElement [],因此我的類型不會被反序列化。

所以我想我可以去兩種方式之一:或者生成將反序列化我的類型,而不是保留爲XmlElement的類,或者採取XmlElements並單獨反序列化它們。反序列化我需要一個XmlReader,所以我需要從一個XmlElement轉到一個XmlReader,我不知道該怎麼做。謝謝。

示例: 文件:theirs.xsd

<xs:element name="ProprietaryContainer"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="name" type="xs:string"/> 
     <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

文件:mine.xsd

<xs:element name="MyPairType"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="key" type="xs:string"/> 
     <xs:element name="value" type="xs:long"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

文件:message.xml

<their:ProprietaryContainer> 
    <their:name>pairContainer</their:name> 
    <mine:MyPairType> 
    <mine:key>abc</mine:key> 
    <mine:value>long</mine:value> 
    </mine:MyPairType> 
</their:ProprietaryContainer> 
+0

(回覆評論) – 2009-06-09 14:26:24

回答

1

從問題:

反序列化,我需要一個XmlReader,所以我需要從XmlElement的到一個XmlReader這我不知道去怎麼辦

using(XmlReader reader = new XmlNodeReader(element)) { 
    //... use reader 
} 
+0

謝謝,我想這現在,但我不斷收到一個異常,說'XML文檔中有錯誤'。 XmlElement是否適用於反序列化? – brianpartridge 2009-06-09 14:05:12

相關問題