Procedura: specificare un nome di elemento alternativo per un flusso XML

Tramite l'utilizzo di XmlSerializer, è possibile generare più di un flusso XML con lo stesso set di classi. È consigliabile eseguire questa operazione poiché due diversi servizi Web XML richiedono le stesse informazioni di base, con solo piccole differenze. Si immagini ad esempio due servizi Web XML che elaborano ordini per libri e che pertanto richiedono i numeri ISBN. Un servizio usa il tag <ISBN> mentre il secondo usa il tag <BookID>. Si dispone di una classe denominata Book che contiene un campo denominato 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. Per il primo servizio Web XML, tale comportamento è quello previsto. 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.

Per creare un flusso XML con un nome dell'elemento alternativo

  1. Creare un'istanza della classe XmlElementAttribute.

  2. Impostare ElementName di XmlElementAttribute su "BookID".

  3. Creare un'istanza della classe XmlAttributes.

  4. Aggiungere l'oggetto XmlElementAttribute alla raccolta a cui si accede tramite la proprietà XmlElements di XmlAttributes.

  5. Creare un'istanza della classe XmlAttributeOverrides.

  6. Aggiungere XmlAttributes a XmlAttributeOverrides e passare il tipo dell'oggetto da sottoporre a override e il nome del membro da sottoporre a override.

  7. Creare un'istanza della classe XmlSerializer con XmlAttributeOverrides.

  8. Creare un'istanza della classe Book e serializzarla o deserializzarla.

Esempio

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);  
}  

Il flusso XML potrebbe assomigliare agli elementi seguenti.

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

Vedi anche