Cómo especificar el nombre de un elemento alternativo para una secuencia XML
Ejemplo de código
Con XmlSerializer, puede generar más de una secuencia XML con el mismo conjunto de clases. Esto puede ser aconsejable debido a que dos servicios Web XML distintos requieren la misma información básica, con sólo pequeñas diferencias. Por ejemplo, imagine dos servicios Web XML que procesan pedidos de libros y que requieren números ISBN. Un servicio utiliza la etiqueta <ISBN>, mientras que el otro utiliza la etiqueta <BookID>. Tiene una clase denominada Book
que contiene un campo denominado ISBN
. Cuando se serializa una instancia de la clase Book
, de manera predeterminada utilizará el nombre de miembro (ISBN) como nombre de elemento de la etiqueta. Para el primer servicio Web XML, esto es como se esperaba. Sin embargo, para enviar la secuencia XML al segundo servicio Web XML, debe reemplazar la serialización de modo que el nombre de elemento de la etiqueta sea BookID
.
Para crear una secuencia XML con un nombre de elemento alternativo
Cree una instancia de la clase XmlElementAttribute.
Establezca el valor de ElementName del objeto XmlElementAttribute en "BookID".
Cree una instancia de la clase XmlAttributes.
Agregue el objeto XmlElementAttribute a la colección a la que se tiene acceso a través de la propiedad XmlElements de XmlAttributes .
Cree una instancia de la clase XmlAttributeOverrides.
Agregue el objeto XmlAttributes a XmlAttributeOverrides y pase el tipo del objeto que se reemplazará y el nombre del miembro que se reemplaza.
Cree una instancia de la clase XmlSerializer con XmlAttributeOverrides.
Cree una instancia de la clase
Book
y serialícela o deserialícela.
Ejemplo
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);
}
La secuencia XML tendría la apariencia siguiente.
<Book>
<BookID>123456789</BookID>
</Book>
Vea también
Tareas
Cómo serializar un objeto
Cómo deserializar un objeto
Cómo deserializar un objeto
Referencia
XmlSerializer
XmlElementAttribute
XmlAttributes
XmlAttributeOverrides