Comment : spécifier un nom d'élément différent pour un flux XML

Via XmlSerializer, vous pouvez générer plusieurs flux de données XML avec un même ensemble de classes. Vous pouvez procéder ainsi car deux services Web XML différents nécessitent les mêmes informations de base, avec seulement de légères différences. Par exemple, imaginez deux services Web XML qui traitent des commandes de livres. Ils nécessitent donc tous les deux des numéros ISBN. Un service utilise la balise <ISBN> tandis que l’autre utilise la balise <BookID>. Vous disposez d'une classe nommée Book qui contient un champ nommé ISBN. Lorsqu'une instance de la classe Book est sérialisée, elle utilise par défaut le nom de membre (ISBN) comme nom d'élément de balise. Pour le premier service Web XML, c'est ce qui est prévu. Toutefois, pour envoyer le flux de données XML au deuxième service Web XML, vous devez substituer la sérialisation afin que le nom d'élément de la balise soit BookID.

Pour créer un flux de données XML avec un nom d'élément différent

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

  2. Affectez "BookID" à ElementName de XmlElementAttribute.

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

  4. Ajoutez l'objet XmlElementAttribute à la collection accessible 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 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-la.

Exemple

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

Le flux de données XML peut se présenter comme suit.

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

Voir aussi