Maison > développement back-end > C++ > Comment désactiver le rendu des éléments racine dans la sérialisation XML pour les tableaux ?

Comment désactiver le rendu des éléments racine dans la sérialisation XML pour les tableaux ?

Mary-Kate Olsen
Libérer: 2025-01-03 16:34:41
original
776 Les gens l'ont consulté

How to Disable Root Element Rendering in XML Serialization for Arrays?

Sérialisation XML : désactivation du rendu de l'élément racine dans les tableaux

La sérialisation est un processus crucial dans le développement logiciel, permettant de convertir des objets en un format persistant comme XML. Cependant, il peut arriver que vous souhaitiez modifier le comportement de la sérialisation, par exemple en désactivant le rendu de l'élément racine pour les collections.

Désactivation du rendu de l'élément racine

Envisagez une classe représentant un article de magasin avec à la fois un nom de produit et une liste de variantes. Par défaut, la sérialisation utilisant des annotations XML telles que [XmlRoot] et [XmlArrayItem] produit le XML suivant :

<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>
Copier après la connexion

Cependant, vous souhaiterez peut-être éliminer complètement l'élément Variants. Pour y parvenir, remplacez l'attribut [XmlArrayItem] par [XmlElement] dans votre code. Cela demande au sérialiseur de restituer les variantes en tant qu'enfants directs de l'élément racine SHOPITEM.

<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
Copier après la connexion

Suppression des espaces de noms

Vous remarquerez peut-être également la présence de xsi et xsd espaces de noms dans l’élément racine. Si vous le souhaitez, vous pouvez supprimer ces espaces de noms en créant une instance XmlSerializerNamespaces avec un espace de noms vide et en la fournissant lors de la sérialisation.

Exemple de code

L'exemple suivant illustre le modifications :

[XmlRoot("SHOPITEM")]
public class ShopItem
{
    [XmlElement("PRODUCTNAME")]
    public string ProductName { get; set; }

    [XmlElement("VARIANT")] // was [XmlArrayItem]
    public List<ShopItem> Variants { get; set; }
}

// ...

ShopItem item = new ShopItem()
{
    ProductName = "test",
    Variants    = new List<ShopItem>()
    {
        new ShopItem{ ProductName = "hi 1" },
        new ShopItem{ ProductName = "hi 2" }
    }
};

// This will remove the xsi/xsd namespaces from serialization
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns);
Copier après la connexion

Sortie

Le XML résultant sans l'élément Variants et les espaces de noms :


<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal