L'élément racine d'une collection peut-il être supprimé lors de la sérialisation XML dans .NET ?
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; } }
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>
Cependant, l'objectif est de supprimer les
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);
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>
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!