Désactiver le rendu de l'élément racine du tableau dans la sérialisation XML
Dans la sérialisation XML, vous pouvez rencontrer une situation dans laquelle vous devez désactiver le rendu de l'élément racine d'un tableau. Cette question illustre un scénario dans lequel une classe avec une collection d'objets est sérialisée, ce qui entraîne un XML avec un élément racine indésirable.
Résolution :
Pour désactiver le rendu de l'élément racine, vous pouvez remplacer l'attribut [XmlArrayItem] par [XmlElement] sur la propriété de collection. Cela demande au sérialiseur de sérialiser directement les éléments de collection au lieu de les enfermer dans un élément racine.
De plus, pour supprimer les espaces de noms xsi et xsd inutiles de l'élément racine, vous pouvez créer une instance de XmlSerializerNamespaces avec un vide espace de noms. Cette instance d'espace de noms peut être transmise lors de la sérialisation pour empêcher l'inclusion d'espaces de noms indésirables.
Exemple :
L'extrait de code suivant illustre la définition de classe révisée et le processus de sérialisation :
[XmlRoot("SHOPITEM")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlElement("VARIANT")] // was [XmlArrayItem] public List<ShopItem> Variants { get; set; } } // ... XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); // Empty namespace to remove xsi/xsd XmlSerializer ser = new XmlSerializer(typeof(ShopItem)); ser.Serialize(Console.Out, item, ns);
Avec ces modifications en place, le XML résultant ne contiendra plus l'élément racine « Variantes » et ne comportera pas l'élément racine Espaces de noms xsi/xsd. Cela désactive effectivement le rendu de l'élément racine du tableau.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!