Procedura: specificare un nome di elemento alternativo per un flusso XML
Esempio di codice
Mediante XmlSerializer, è possibile generare più di un flusso XML con lo stesso gruppo di classi. Questa operazione può essere necessaria quando due diversi servizi Web XML richiedono le stesse informazioni di base, con differenze minime. Nel caso, ad esempio, di due servizi Web che elaborano ordini per libri e richiedono pertanto numeri ISBN, uno dei due servizi utilizza il tag <ISBN> e il secondo utilizza il tag <BookID>. Si dispone di una classe denominata Book
contenente un campo denominato ISBN
. Quando un'istanza della classe Book
viene serializzata, per impostazione predefinita utilizzerà il nome del membro (ISBN) come nome dell'elemento del tag. Per il primo servizio Web XML, si tratta del comportamento previsto. Per inviare il flusso XML al secondo servizio Web XML, è invece 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 di elemento alternativo
Creare un'istanza della classe XmlElementAttribute.
Impostare ElementName di XmlElementAttribute su "BookID".
Creare un'istanza della classe XmlAttributes.
Aggiungere l'oggetto XmlElementAttribute all'insieme a cui si è eseguito l'accesso tramite la proprietà XmlElements di XmlAttributes.
Creare un'istanza della classe XmlAttributesOverrides.
Aggiungere XmlAttributes a XmlAttributeOverrides, passando il tipo dell'oggetto di cui eseguire l'override e il nome del membro sottoposto a override.
Creare un'istanza della classe XmlSerializer con XmlAttributeOverrides.
Creare un'istanza della classe
Book
e quindi serializzarla o deserializzarla.
Esempio
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 essere simile al seguente.
<Book>
<BookID>123456789</BookID>
</Book>
Vedere anche
Attività
Procedura: serializzare un oggetto
Procedura: deserializzare un oggetto
Procedura: deserializzare un oggetto
Riferimenti
XmlSerializer
XmlElementAttribute
XmlAttributes
XmlAttributeOverrides