Procedura: Specificare un nome di elemento alternativo per un flusso XMLHow to: Specify an Alternate Element Name for an XML Stream

Tramite l'utilizzo di XmlSerializer, è possibile generare più di un flusso XML con lo stesso set di classi.Using the XmlSerializer, you can generate more than one XML stream with the same set of classes. È consigliabile eseguire questa operazione poiché due diversi servizi Web XML richiedono le stesse informazioni di base, con solo piccole differenze.You might want to do this because two different XML Web services require the same basic information, with only slight differences. Si immagini ad esempio due servizi Web XML che elaborano ordini per libri e che pertanto richiedono i numeri ISBN.For example, imagine two XML Web services that process orders for books, and thus both require ISBN numbers. Un servizio usa il tag <ISBN> mentre il secondo usa il tag <BookID>.One service uses the tag <ISBN> while the second uses the tag <BookID>. Si dispone di una classe denominata Book che contiene un campo denominato ISBN.You have a class named Book that contains a field named ISBN. Quando viene serializzata un'istanza della classe Book, per impostazione predefinita verrà utilizzato il nome del membro (ISBN) come nome dell'elemento del tag.When an instance of the Book class is serialized, it will, by default, use the member name (ISBN) as the tag element name. Per il primo servizio Web XML, tale comportamento è quello previsto.For the first XML Web service, this is as expected. Per inviare invece il flusso XML al secondo servizio Web XML, è necessario eseguire l'override della serializzazione in modo che il nome dell'elemento del tag sia BookID.But to send the XML stream to the second XML Web service, you must override the serialization so that the tag's element name is BookID.

Per creare un flusso XML con un nome dell'elemento alternativoTo create an XML stream with an alternate element name

  1. Creare un'istanza della classe XmlElementAttribute.Create an instance of the XmlElementAttribute class.

  2. Impostare ElementName di XmlElementAttribute su "BookID".Set the ElementName of the XmlElementAttribute to "BookID".

  3. Creare un'istanza della classe XmlAttributes.Create an instance of the XmlAttributes class.

  4. Aggiungere l'oggetto XmlElementAttribute alla raccolta a cui si accede tramite la proprietà XmlElements di XmlAttributes.Add the XmlElementAttribute object to the collection accessed through the XmlElements property of XmlAttributes .

  5. Creare un'istanza della classe XmlAttributeOverrides.Create an instance of the XmlAttributeOverrides class.

  6. Aggiungere XmlAttributes a XmlAttributeOverrides e passare il tipo dell'oggetto da sottoporre a override e il nome del membro da sottoporre a override.Add the XmlAttributes to the XmlAttributeOverrides, passing the type of the object to override and the name of the member being overridden.

  7. Creare un'istanza della classe XmlSerializer con XmlAttributeOverrides.Create an instance of the XmlSerializer class with XmlAttributeOverrides.

  8. Creare un'istanza della classe Book e serializzarla o deserializzarla.Create an instance of the Book class, and serialize or deserialize it.

EsempioExample

Public Class 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 class 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);  
}  

Il flusso XML potrebbe assomigliare agli elementi seguenti.The XML stream might resemble the following.

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

Vedere ancheSee also