Procedimiento para especificar un nombre de elemento alternativo para una secuencia XML

UtilizandoXmlSerializer, se puede generar más de una secuencia XML con el mismo conjunto de clases. Puede que desee proceder de esta forma ya que dos servicios Web XML diferentes requieren la misma información básica, con solo ligeras diferencias. Por ejemplo, imagine dos servicios Web XML que procesan órdenes para los libros y así ambos requieren los números de ISBN. Un servicio usa la etiqueta <ISBN> mientras el segundo usa la etiqueta <BookID>. Tiene una clase denominada Book que contiene un campo denominado ISBN. Cuando se serializa una instancia de la clase Book, utilizará, de forma predeterminada, el nombre de miembro (ISBN) como el nombre de elemento de etiqueta. Para el primer servicio Web XML, esto es como esperado. Pero para enviar la secuencia XML al segundo servicio Web XML, debe invalidar la serialización para que el nombre de elemento de la etiqueta sea BookID.

Para crear una secuencia XML con un nombre de elemento alternativo

  1. Cree una instancia de la clase XmlElementAttribute.

  2. Establece el ElementName de XmlElementAttribute a "BookID".

  3. Cree una instancia de la clase XmlAttributes.

  4. Agregue el objeto XmlElementAttribute a la colección a la que ha accedido mediante la propiedad XmlElements de XmlAttributes .

  5. Cree una instancia de la clase XmlAttributeOverrides.

  6. Agregue XmlAttributes a XmlAttributeOverrides, pasando el tipo del objeto para invalidarlo y el nombre de miembro invalidado.

  7. Cree una instancia de la clase XmlSerializer con XmlAttributeOverrides.

  8. Cree una instancia de la clase Book y serialice o deserialícela.

Ejemplo

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

La secuencia XML puede parecerse a lo siguiente.

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

Vea también