Partager via


Comment : Spécifier un autre nom d'élément pour un flux XML

Exemple de code

À l'aide de XmlSerializer, vous pouvez générer plusieurs flux XML avec le même ensemble de classes. Vous pouvez vouloir effectuer cette opération car deux services Web XML différents nécessitent les mêmes informations de base, à quelques différences près. Par exemple, imaginez deux services Web XML qui traitent des commandes de livres et nécessitent par conséquent des numéros ISBN. Un service utilise la balise <ISBN>, l'autre service utilise la balise <BookID>. Vous avez une classe nommée Book qui contient un champ nommé ISBN. Lorsqu'une instance de la classe Book est sérialisée, elle utilisera, par défaut, le nom de membre (ISBN) comme le nom de l'élément balise. C'est ce qui est prévu pour le premier service Web XML. Cependant, pour envoyer le flux XML au deuxième service Web XML, vous devez substituer la sérialisation pour que le nom de l'élément balise soit BookID.

Pour créer un flux XML avec un autre nom d'élément

  1. Créez une instance de la classe XmlElementAttribute.

  2. Attribuez la valeur "BookID" à ElementName de XmlElementAttribute.

  3. Créez une instance de la classe XmlAttributes.

  4. Ajoutez l'objet XmlElementAttribute à la collection accédée via la propriété XmlElements de XmlAttributes.

  5. Créez une instance de la classe XmlAttributeOverrides.

  6. Ajoutez XmlAttributes à XmlAttributeOverrides, en passant le type de l'objet à substituer et le nom du membre qui est substitué.

  7. Créez une instance de la classe XmlSerializer avec XmlAttributeOverrides.

  8. Créez une instance de la classe Book, et sérialisez ou désérialisez cette classe.

Exemple

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

Le flux XML peut ressembler à ce qui suit.

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

Voir aussi

Tâches

Comment : Sérialiser un objet
Comment : Désérialiser un objet
Comment : Désérialiser un objet

Référence

XmlSerializer
XmlElementAttribute
XmlAttributes
XmlAttributeOverrides

Autres ressources

Sérialisation XML et SOAP