Heim > Backend-Entwicklung > C++ > Wie unterdrückt man das Root-Array-Element bei der XML-Serialisierung?

Wie unterdrückt man das Root-Array-Element bei der XML-Serialisierung?

Patricia Arquette
Freigeben: 2024-12-31 18:30:10
Original
926 Leute haben es durchsucht

How to Suppress the Root Array Element in XML Serialization?

XML-Serialisierung: Root-Array-Element unterdrücken

Frage:

Kann eine XML-Serialisierung durchführen Soll das Stammelement der Sammlung deaktiviert werden? Betrachten Sie die folgende Klasse mit Attributen:

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

    [XmlArrayItem("VARIANT")]
    public List<ShopItem> Variants { get; set; }
}
Nach dem Login kopieren

Diese Klasse generiert XML mit einem Stamm Element:

<SHOPITEM xmlns:xsi="" xmlns:xsd="">
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>
Nach dem Login kopieren

Wie können in der Ausgabe weggelassen werden? Wie können außerdem die Namensräume xsi und xsd aus dem Stammelement entfernt werden?

Antwort:

Um die Element, ersetzen Sie das Attribut [XmlArrayItem] durch [XmlElement] für die Sammlungseigenschaft:

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

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

Um die xsi- und xsd-Namespaces zu entfernen, erstellen Sie eine XmlSerializerNamespaces-Instanz mit einem leeren Namespace und verwenden Sie diese während der Serialisierung:

// ...

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
Nach dem Login kopieren

Das resultierende XML hat das gewünschte Format:

<?xml version="1.0" encoding="ibm850"?>
<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie unterdrückt man das Root-Array-Element bei der XML-Serialisierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage