Heim > Backend-Entwicklung > C++ > Wie entferne ich das Root-Element aus einem XML-Array mit XmlSerializer?

Wie entferne ich das Root-Element aus einem XML-Array mit XmlSerializer?

Susan Sarandon
Freigeben: 2024-12-29 20:53:18
Original
781 Leute haben es durchsucht

How to Remove the Root Element from an XML Array Using XmlSerializer?

XML-Serialisierung: Deaktivieren des Stammelements eines Arrays

Bei der XML-Serialisierung ist es oft wünschenswert, die Darstellung des Stammelements für Sammlungen zu unterdrücken. Dadurch können XML-Strukturen vereinfacht und die Lesbarkeit verbessert werden. In diesem Artikel wird erläutert, wie Sie dies mit dem XmlSerializer von ASP.NET erreichen.

Betrachten Sie die folgende ShopItem-Klasse mit XML-Serialisierungsattributen:

[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

Das Serialisieren einer Instanz dieser Klasse erzeugt das folgende XML:

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

Wie Sie sehen, ist ein unerwünschter Wurzelelement vorhanden ist. Um das Rendern zu deaktivieren, müssen Sie das Attribut [XmlArrayItem] durch [XmlElement] ersetzen.

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

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

Diese Änderung führt zu folgendem vereinfachten XML:

<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
Nach dem Login kopieren

Außerdem kann Folgendes auftreten XML-Namespaces wie xsi und xsd im Root-Element. Um diese zu entfernen, erstellen Sie eine XmlSerializerNamespaces-Instanz mit einem leeren Namespace und übergeben Sie ihn während der Serialisierung.

Hier ist ein Beispiel:

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns);
Nach dem Login kopieren

Dadurch werden die unerwünschten Namespaces aus der XML-Ausgabe entfernt.

Das obige ist der detaillierte Inhalt vonWie entferne ich das Root-Element aus einem XML-Array mit XmlSerializer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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