Vorgehensweise: Angeben eines alternativen Elementnamens für einen XML-Stream
Mit XmlSerializer können Sie mehr als einen XML-Stream mit der gleichen Gruppe von Klassen generieren. Dies ist beispielsweise dann sinnvoll, wenn zwei verschiedene XML-Webdienste die gleichen grundlegenden Informationen benötigen, die sich nur in wenigen Details unterscheiden. Stellen Sie sich beispielsweise vor, zwei XML-Webdienste, die Buchbestellungen verarbeiten, erfordern die Angabe von ISBN-Nummern. Ein Dienst verwendet das Tag <ISBN>, während der zweite das Tag <BookID> verwendet. Sie verfügen über eine Klasse mit dem Namen von Book
, die ein Feld namens ISBN
enthält. In der Standardeinstellung wird beim Serialisieren einer Instanz der Book
-Klasse der Membername (ISBN) als Name des XML-Elements verwendet. Für den ersten XML-Webdienst entspricht dies dem erwarteten Verhalten. Wenn der XML-Stream jedoch an den zweiten XML-Webdienst gesendet werden soll, muss die Serialisierung überschrieben werden, damit der Elementname des Tags BookID
lautet.
So erstellen Sie einen XML-Stream mit einem alternativen Elementnamen
Erstellen Sie eine Instanz der XmlElementAttribute-Klasse.
Legen Sie die ElementName-Eigenschaft des XmlElementAttribute-Objekts auf "BookID" fest.
Erstellen Sie eine Instanz der XmlAttributes-Klasse.
Fügen Sie das
XmlElementAttribute
-Objekt der Sammlung hinzu, auf die über die XmlElements-Eigenschaft von XmlAttributes zugegriffen wird.Erstellen Sie eine Instanz der XmlAttributeOverrides-Klasse.
Fügen Sie das
XmlAttributes
-Objekt dem XmlAttributeOverrides-Objekt hinzu, und geben Sie dabei sowohl den Typ des zu überschreibenden Objekts als auch den Namen des Members an, das überschrieben wird.Erstellen Sie eine Instanz der
XmlSerializer
-Klasse mitXmlAttributeOverrides
.Erstellen Sie eine Instanz der
Book
-Klasse, und serialisieren oder deserialisieren Sie diese Instanz.
Beispiel
Public Function SerializeOverride()
' Creates an XmlElementAttribute with the alternate name.
Dim myElementAttribute As XmlElementAttribute = _
New XmlElementAttribute()
myElementAttribute.ElementName = "BookID"
Dim myAttributes As XmlAttributes = New XmlAttributes()
myAttributes.XmlElements.Add(myElementAttribute)
Dim myOverrides As XmlAttributeOverrides = New XmlAttributeOverrides()
myOverrides.Add(typeof(Book), "ISBN", myAttributes)
Dim mySerializer As XmlSerializer = _
New XmlSerializer(GetType(Book), myOverrides)
Dim b As Book = New Book()
b.ISBN = "123456789"
' Creates a StreamWriter to write the XML stream to.
Dim writer As StreamWriter = New StreamWriter("Book.xml")
mySerializer.Serialize(writer, b);
End Class
public void SerializeOverride()
{
// Creates an XmlElementAttribute with the alternate name.
XmlElementAttribute myElementAttribute = new XmlElementAttribute();
myElementAttribute.ElementName = "BookID";
XmlAttributes myAttributes = new XmlAttributes();
myAttributes.XmlElements.Add(myElementAttribute);
XmlAttributeOverrides myOverrides = new XmlAttributeOverrides();
myOverrides.Add(typeof(Book), "ISBN", myAttributes);
XmlSerializer mySerializer =
new XmlSerializer(typeof(Book), myOverrides);
Book b = new Book();
b.ISBN = "123456789";
// Creates a StreamWriter to write the XML stream to.
StreamWriter writer = new StreamWriter("Book.xml");
mySerializer.Serialize(writer, b);
}
Der XML-Stream könnte wie folgt aussehen.
<Book>
<BookID>123456789</BookID>
</Book>