Maison > développement back-end > C++ > Comment supprimer l'élément racine d'une collection XML lors de la sérialisation .NET ?

Comment supprimer l'élément racine d'une collection XML lors de la sérialisation .NET ?

Susan Sarandon
Libérer: 2024-12-31 17:10:11
original
749 Les gens l'ont consulté

How to Remove the Root Element from an XML Collection during .NET Serialization?

Sérialisation XML - Désactiver le rendu des éléments racine dans les collections

Question :

L'élément racine d'une collection peut-il être supprimé lors de la sérialisation XML dans .NET ?

Problème :

Considérez une classe avec des attributs de sérialisation comme suit :

[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

Cela donne un XML comme ceci :

<SHOPITEM xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>
Copier après la connexion

Cependant, l'objectif est de supprimer les élément entièrement. De plus, les espaces de noms xsi et xsd doivent être omis de l'élément racine. Est-ce possible ?

Réponse :

Pour désactiver le rendu de l'élément racine d'une collection, remplacez l'attribut [XmlArrayItem] par [XmlElement] dans votre code. Pour supprimer les espaces de noms xsi et xsd, créez une instance XmlSerializerNamespaces avec un espace de noms vide et transmettez-la lors de la sérialisation.

Voici un exemple mis à jour :

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

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

// ...

// Create a serializer namespaces object
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

// Create a serializer and pass in the namespaces object
XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns);
Copier après la connexion

Cela produira le résultat suivant :

<?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