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
Patricia ArquetteOriginal
2024-12-31 18:30:10907Durchsuche

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; }
}

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>

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; }
}

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

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>

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!

Stellungnahme:
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
Vorheriger Artikel:CS – Woche 4Nächster Artikel:CS – Woche 4