Compartilhar via


Como especificar um nome de elemento alternativo para um fluxo XML

Usando o XmlSerializer, você pode gerar mais de um fluxo XML com o mesmo conjunto de classes. Talvez você queira fazer isso porque dois serviços Web XML diferentes exigem as mesmas informações básicas, com apenas pequenas diferenças. Por exemplo, imagine dois serviços Web XML que processam pedidos de livros e, portanto, ambos exigem números ISBN. Um serviço usa a marca <ISBN> enquanto o segundo usa a marca <BookID>. Você tem uma classe chamada Book que contém um campo chamado ISBN. Quando uma instância da Book classe é serializada, ela usará, por padrão, o nome do membro (ISBN) como o nome do elemento de marca. Para o primeiro serviço Web XML, isso é o esperado. Mas, para enviar o fluxo XML para o segundo serviço Web XML, você deve substituir a serialização para que o nome do elemento da tag seja BookID.

Para criar um fluxo XML com um nome de elemento alternativo

  1. Crie uma instância da XmlElementAttribute classe.

  2. Defina o ElementName do XmlElementAttribute para "BookID".

  3. Crie uma instância da XmlAttributes classe.

  4. Adicione o objeto XmlElementAttribute à coleção acessada através da propriedade XmlElements de XmlAttributes.

  5. Crie uma instância da XmlAttributeOverrides classe.

  6. Adicione o XmlAttributes ao XmlAttributeOverrides, especificando o tipo do objeto a ser substituído e o nome do membro que está sendo substituído.

  7. Crie uma instância da XmlSerializer classe com XmlAttributeOverrides.

  8. Crie uma instância da classe Book, e serializa-a ou desserializa-a.

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

O fluxo XML pode ser semelhante ao seguinte.

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

Consulte também