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
692 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!

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