C# serialisieren von xsi:type-und xsd
Habe ich ein schema wie folgt definiert:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Books" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Books" msdata:IsDataSet="true" msdata:Locale="en-US">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Book" type="MyBookType"></xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name="MyBookType">
...
</xs:complexType>
</xs:schema>
Mithilfe dieses Schemas und xsd.exe ich generieren der Klassen, die verwendet werden bei der Serialisierung.
Die Klasse generiert, die von dem oben beschriebenen schema erzeugt folgende xml als serialisierte:
<Books>
<Book>
...
</Book>
</Books>
Diese xml wird in einer SOAP-Anforderung und der Dienst am anderen Ende erwartet Sie die folgende xml:
<Books>
<Book xsi:type="MyBookType">
...
</Book>
</Books>
Wie Bearbeite ich mein schema so, dass die xsi:type-Attribut enthalten ist, in das serialisierte xml?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie einen abgeleiteten Typ, und ein
XmlInclude
Attribut. Zum Beispiel:Läuft das erzeugt diese Ausgabe:
Da Sie mit einer SOAP-Anfrage, ich gehe davon aus, ASMX, was bedeutet, dass die Serialisierung geschieht implizit. Sie benötigen, um
[XmlInclude]
zu was auch immer hält die Sammlung von Büchern. Dies könnte ein parameter in einer webmethod, zum Beispiel.Können Sie automatisch das entsprechende XmlInclude-Attribut, ausgehend von XSD und WSDL, wenn Sie die Typen definieren in XSD mit der Vererbung Beziehung, die ich dargestellt, in C# - code.
In WSDL, die request-message dauert vielleicht
Books
geben, die eine Sammlung vonBook
. Separat definierenMyBookType
ergibt sich aus dem Buch jedoch nicht erweitern.