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
Susan SarandonOriginal
2024-12-31 17:10:11734Durchsuche

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

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>

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

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>

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!

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