Como: especificar um nome de elemento alternativo para um fluxo XMLHow to: Specify an Alternate Element Name for an XML Stream

Usando o XmlSerializer, você pode gerar mais de um fluxo de XML com o mesmo conjunto de classes.Using the XmlSerializer, you can generate more than one XML stream with the same set of classes. Você deve querer fazer isso porque dois diferentes serviços Web XML exigem as mesmas informações básicas, com apenas poucas diferenças.You might want to do this because two different XML Web services require the same basic information, with only slight differences. Por exemplo, imagine dois serviços Web XML que processam pedidos para livros e, portanto, exigem números ISBN.For example, imagine two XML Web services that process orders for books, and thus both require ISBN numbers. Um serviço usa a marca <ISBN>, enquanto o segundo usa a marca <BookID>.One service uses the tag <ISBN> while the second uses the tag <BookID>. Você tem uma classe nomeada Book que contém um campo nomeado ISBN.You have a class named Book that contains a field named ISBN. Quando uma instância da classe Book é serializada, ela, por padrão, usará o nome de membro (ISBN) como o nome de elemento da marca.When an instance of the Book class is serialized, it will, by default, use the member name (ISBN) as the tag element name. Para o primeiro serviço Web XML, esse é o esperado.For the first XML Web service, this is as expected. Mas, para enviar o fluxo XML para o segundo serviço Web XML, você deverá sobrescrever a serialização para que o nome do elemento da marca seja BookID.But to send the XML stream to the second XML Web service, you must override the serialization so that the tag's element name is BookID.

Para criar um fluxo XML com um nome de elemento alternativoTo create an XML stream with an alternate element name

  1. Crie uma instância da classe XmlElementAttribute.Create an instance of the XmlElementAttribute class.

  2. Defina o ElementName do XmlElementAttribute como "BookID".Set the ElementName of the XmlElementAttribute to "BookID".

  3. Crie uma instância da classe XmlAttributes.Create an instance of the XmlAttributes class.

  4. Adicione o objeto XmlElementAttribute à coleção acessada por meio da propriedade XmlElements de XmlAttributes.Add the XmlElementAttribute object to the collection accessed through the XmlElements property of XmlAttributes .

  5. Crie uma instância da classe XmlAttributeOverrides.Create an instance of the XmlAttributeOverrides class.

  6. Adicione o XmlAttributes ao XmlAttributeOverrides, passando o tipo do objeto para sobrescrever e o nome do membro que está sendo sobrescrito.Add the XmlAttributes to the XmlAttributeOverrides, passing the type of the object to override and the name of the member being overridden.

  7. Crie uma instância da classe XmlSerializer com XmlAttributeOverrides.Create an instance of the XmlSerializer class with XmlAttributeOverrides.

  8. Crie uma instância da classe Book e serialize-a ou desserialize-a.Create an instance of the Book class, and serialize or deserialize it.

ExemploExample

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

O fluxo XML pode ter a seguinte aparência.The XML stream might resemble the following.

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

Consulte tambémSee also