Darstellung des Array-Stammelements in der XML-Serialisierung deaktivieren
Bei der XML-Serialisierung kann es vorkommen, dass Sie die Darstellung von deaktivieren müssen das Wurzelelement eines Arrays. Diese Frage veranschaulicht ein Szenario, in dem eine Klasse mit einer Sammlung von Objekten serialisiert wird, was zu einem XML mit einem unerwünschten Stammelement führt.
Lösung:
So deaktivieren Sie das Rendering des Stammelements können Sie das Attribut [XmlArrayItem] durch [XmlElement] in der Sammlungseigenschaft ersetzen. Dadurch wird der Serialisierer angewiesen, die Sammlungselemente direkt zu serialisieren, anstatt sie in ein Stammelement einzuschließen.
Um die unnötigen xsi- und xsd-Namespaces aus dem Stammelement zu entfernen, können Sie außerdem eine Instanz von XmlSerializerNamespaces mit einem Leerzeichen erstellen Namensraum. Diese Namespace-Instanz kann während der Serialisierung übergeben werden, um die Einbeziehung unerwünschter Namespaces zu verhindern.
Beispiel:
Der folgende Codeausschnitt demonstriert die überarbeitete Klassendefinition und den Serialisierungsprozess:
[XmlRoot("SHOPITEM")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlElement("VARIANT")] // was [XmlArrayItem] public List<ShopItem> Variants { get; set; } } // ... XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); // Empty namespace to remove xsi/xsd XmlSerializer ser = new XmlSerializer(typeof(ShopItem)); ser.Serialize(Console.Out, item, ns);
Mit diesen Änderungen enthält das resultierende XML nicht mehr das Stammelement „Variants“ und es fehlt ihm xsi/xsd-Namespaces. Dadurch wird das Rendern des Stammelements für das Array effektiv deaktiviert.
Das obige ist der detaillierte Inhalt vonWie verhindert man die XML-Serialisierung des Stammelements eines Arrays?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!