2009-06-08 5 views
1

Ich habe ein XML-Dokument, das Typen aus 2 XML-Schemas enthält. One (theirs.xsd) ist ein proprietäres Schema, in das ich integriere (und nicht bearbeiten kann). Um dies zu tun, definiere ich meinen eigenen Typ (mine.xsd), der ein Element innerhalb eines 'any'-Elements ist, ist der proprietäre Typ.Deserialisieren von XML zu Objekten, die in mehreren Schemas definiert sind

Ich verwende Visual Studio xsd.exe, um C# -Klassen aus den Schemas zu generieren. Das Element 'any' im proprietären Typ wird jedoch als XmlElement [] generiert, und daher wird mein Typ nicht deserialisiert.

Also ich denke, ich kann eine von zwei Möglichkeiten gehen: Entweder generieren Klassen, die meinen Typ deserialisieren, anstatt es als XmlElement, oder nehmen Sie die XmlElements und deserialize sie einzeln. Zum Deserialisieren benötige ich einen XmlReader, also müsste ich von einem XmlElement zu einem XmlReader wechseln, von dem ich nicht weiß, wie ich es machen soll. Vielen Dank.

Beispiel: Datei: 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> 

Datei: 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> 

Datei: 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

(antwortete Kommentar) –

Antwort

1

Von der Frage:

deserialisieren ich einen XmlReader brauchen, also würde ich von einem XmlElement zu einem XmlReader gehen müssen, die ich nicht sicher bin, wie

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

Dank zu tun, ich versuche, dies jetzt, aber ich bekomme immer noch eine Ausnahme, die besagt: "Es gibt einen Fehler im XML-Dokument". Ist ein XmlElement nicht für die Deserialisierung gültig? – brianpartridge

+0

Es sollte in Ordnung sein - vielleicht ein MoveToContent() hinzufügen? –

+0

Nevermind, ich erkannte das Problem, nachdem ich Ihren Vorschlag hinzugefügt hatte, übergab ich den falschen Typ an den Serialisierer. Danke für die Hilfe! – brianpartridge

Verwandte Themen