Maison > développement back-end > C++ > Comment supprimer l'élément racine du tableau dans la sérialisation XML ?

Comment supprimer l'élément racine du tableau dans la sérialisation XML ?

Patricia Arquette
Libérer: 2024-12-31 18:30:10
original
926 Les gens l'ont consulté

How to Suppress the Root Array Element in XML Serialization?

Sérialisation XML : suppression de l'élément de tableau racine

Question :

La sérialisation d'un XML est-elle possible l'élément racine de la collection doit-il être désactivé ? Considérons la classe suivante avec des attributs :

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

    [XmlArrayItem("VARIANT")]
    public List<ShopItem> Variants { get; set; }
}
Copier après la connexion

Cette classe génère du XML avec une racine element :

<SHOPITEM xmlns:xsi="" xmlns:xsd="">
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>
Copier après la connexion

Comment les être omis de la sortie ? De plus, comment les espaces de noms xsi et xsd peuvent-ils être supprimés de l'élément racine ?

Réponse :

Pour éliminer l'élément élément, remplacez l'attribut [XmlArrayItem] par [XmlElement] pour la propriété de collection :

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

    [XmlElement("VARIANT")] // was [XmlArrayItem]
    public List<ShopItem> Variants { get; set; }
}
Copier après la connexion

Pour supprimer les espaces de noms xsi et xsd, créez une instance XmlSerializerNamespaces avec un espace de noms vide et utilisez-la pendant la sérialisation :

// ...

ShopItem item = new ShopItem() { ProductName = "test", ... };

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

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

Le XML résultant aura le format souhaité :

<?xml version="1.0" encoding="ibm850"?>
<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!

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