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
Créez une instance de la classe XmlElementAttribute.
Attribuez la valeur "BookID" à ElementName de XmlElementAttribute.
Créez une instance de la classe XmlAttributes.
Ajoutez l'objet XmlElementAttribute à la collection accédée via la propriété XmlElements de XmlAttributes.
Créez une instance de la classe XmlAttributeOverrides.
Ajoutez XmlAttributes à XmlAttributeOverrides, en passant le type de l'objet à substituer et le nom du membre qui est substitué.
Créez une instance de la classe XmlSerializer avec XmlAttributeOverrides.
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