Kann das Root-Element einer Sammlung während der XML-Serialisierung in .NET unterdrückt werden? ?
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
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!