Partilhar via


Como: Especificar um nome alternativo de elemento para um fluxo XML

Usando o XmlSerializer, pode gerar mais do que um fluxo XML com o mesmo conjunto de classes. Pode querer fazer isto porque dois serviços Web XML diferentes requerem a mesma informação básica, com apenas pequenas diferenças. Por exemplo, imagine dois serviços Web XML que processam encomendas de livros, e assim ambos requerem números ISBN. Um serviço usa a etiqueta <ISBN> enquanto o segundo usa a etiqueta <BookID>. Tens uma classe chamada Book que contém um campo chamado ISBN. Quando uma instância da classe Book é serializada, por padrão, utilizará o nome do membro (ISBN) como nome do elemento da etiqueta. Para o primeiro serviço Web XML, isto é o esperado. Mas para enviar o fluxo XML para o segundo serviço Web XML, deve sobrescrever a serialização para que o nome do elemento da etiqueta seja BookID.

Para criar um fluxo XML com um nome alternativo de elemento

  1. Cria uma instância da XmlElementAttribute classe.

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

  3. Cria uma instância da XmlAttributes classe.

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

  5. Cria uma instância da XmlAttributeOverrides classe.

  6. Adicione o XmlAttributes ao XmlAttributeOverrides, passando o tipo do objeto a sobrepor e o nome do elemento a ser sobreposto.

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

  8. Cria uma instância da Book classe 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 assemelhar-se ao seguinte.

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

Consulte também