Heim > Backend-Entwicklung > C++ > Wie entferne ich das Root-Element aus einer XML-Sammlung während der .NET-Serialisierung?

Wie entferne ich das Root-Element aus einer XML-Sammlung während der .NET-Serialisierung?

Susan Sarandon
Freigeben: 2024-12-31 17:10:11
Original
692 Leute haben es durchsucht

How to Remove the Root Element from an XML Collection during .NET Serialization?

XML-Serialisierung – Root-Element-Rendering in Sammlungen deaktivieren

Frage:

Kann das Root-Element einer Sammlung während der XML-Serialisierung in .NET unterdrückt werden? ?

Problem:

Betrachten Sie eine Klasse mit Serialisierungsattributen wie der Folgendes:

[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

Dies führt zu XML wie folgt:

<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

Das Ziel besteht jedoch darin, die Element vollständig. Darüber hinaus sollten die Namensräume xsi und xsd im Stammelement weggelassen werden. Ist das möglich?

Antwort:

Um das Rendern des Stammelements für eine Sammlung zu deaktivieren, ersetzen Sie das Attribut [XmlArrayItem] durch [XmlElement] in Ihrem Code. Um die xsi- und xsd-Namespaces zu entfernen, erstellen Sie eine XmlSerializerNamespaces-Instanz mit einem leeren Namespace und übergeben Sie ihn während der Serialisierung.

Hier ist ein aktualisiertes Beispiel:

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

Dies führt zu der folgenden Ausgabe:

<?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 entferne ich das Root-Element aus einer XML-Sammlung während der .NET-Serialisierung?. 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