Condividi tramite


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

XmlSerializerUsando , è possibile generare più di un flusso XML con lo stesso set di classi. È possibile eseguire questa operazione perché due servizi Web XML diversi richiedono le stesse informazioni di base, con solo lievi differenze. Si supponga, ad esempio, che due servizi Web XML che elaborano gli ordini per i libri e quindi richiedono entrambi 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 un'istanza della Book classe viene serializzata, per impostazione predefinita usa il nome del membro (ISBN) come nome dell'elemento tag. Per il primo servizio Web XML, si tratta del previsto. Tuttavia, per inviare 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 di elemento alternativo

  1. Creare un'istanza della XmlElementAttribute classe .

  2. Impostare il ElementName dell'oggetto XmlElementAttribute su "BookID".

  3. Creare un'istanza della XmlAttributes classe .

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

  5. Creare un'istanza della XmlAttributeOverrides classe .

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

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

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

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

Il flusso XML potrebbe essere simile al seguente.

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

Vedere anche