Teilen über


Vorgehensweise: Angeben eines alternativen Elementnamens für einen XML-Stream

Mithilfe des XmlSerializer-Codes können Sie mehrere XML-Datenströme mit demselben Satz von Klassen generieren. Möglicherweise möchten Sie dies tun, da zwei verschiedene XML-Webdienste dieselben grundlegenden Informationen erfordern, wobei nur geringfügige Unterschiede bestehen. Stellen Sie sich beispielsweise zwei XML-Webdienste vor, die Bestellungen für Bücher verarbeiten, und erfordern somit beide ISBN-Nummern. Ein Dienst verwendet das Tag <ISBN> , während die zweite das Tag <BookID>verwendet. Sie haben eine Klasse namens Book , die ein Feld mit dem Namen ISBNenthält. Wenn eine Instanz der Book Klasse serialisiert wird, wird standardmäßig der Membername (ISBN) als Tagelementname verwendet. Für den ersten XML-Webdienst ist dies erwartungsgemäß. Um den XML-Datenstrom jedoch an den zweiten XML-Webdienst zu senden, müssen Sie die Serialisierung überschreiben, damit der Elementname des Tags lautet BookID.

So erstellen Sie einen XML-Datenstrom mit einem alternativen Elementnamen

  1. Erstellen Sie eine Instanz der XmlElementAttribute Klasse.

  2. Setzen Sie das ElementName des XmlElementAttribute auf "BookID" fest.

  3. Erstellen Sie eine Instanz der XmlAttributes Klasse.

  4. Fügen Sie das XmlElementAttribute Objekt der Auflistung hinzu, auf die über die XmlElements Eigenschaft von XmlAttributes zugegriffen wird.

  5. Erstellen Sie eine Instanz der XmlAttributeOverrides Klasse.

  6. Fügen Sie den XmlAttributesXmlAttributeOverridesObjekttyp hinzu, der außer Kraft gesetzt werden soll, und den Namen des zu überschreibenden Elements.

  7. Erstellen Sie eine Instanz der XmlSerializer Klasse mit XmlAttributeOverrides.

  8. Erstellen Sie eine Instanz der Book-Klasse und serialisieren oder deserialisieren Sie sie.

Example

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-Datenstrom sieht möglicherweise wie folgt aus.

<Book>
    <BookID>123456789</BookID>
</Book>

Siehe auch