2016-04-21 6 views
1

ich ein Objekt etwas wie diese:XML-Serialisierung - Leaving Teil der XML als XmlElement

public class MyClass { 
    public string AValue {get;set;} 
    public XmlElement AdditionalConfig {get;set;} 
} 

ich dies aus einem Block von XML erzeugen, die wie folgt aussieht:

<MyClass> 
    <AValue>Something</AValue> 
    <AdditionalConfig> 
    <NewNode Att="Value" /> 
    </AdditionalConfig> 
</MyClass> 

Wenn ich den XmlSerializer zum Deserialisieren der XML-Datei verwende, ist die AdditionalConfig XmlElement-Eigenschaft NewNode. Nun, wenn ich dort ein zweites Element hinzufügen:

<MyClass> 
    <AValue>Something</AValue> 
    <AdditionalConfig> 
    <NewNode Att="Value" /> 
    <AnotherNewNode /> 
    </AdditionalConfig> 
</MyClass> 

Die Deserialisierung funktioniert nicht - es beschwert sich über ein unbekanntes Element ‚AnotherNewNode‘.

Ich habe versucht, MyClass.AdditionalConfig ein Array, aber kein Glück dort. Wie bekomme ich den gesamten Inhalt des Knotens in XmlElement-Objekte?

Wie immer, vielen Dank

+0

Versuchen Sie, mit einem einzigen Knoten mit NewNode und AnotherNewNode als Kinder davon zu enden? –

+0

Nein, ich möchte entweder ein einzelnes XmlElement für oder eine Sammlung von XmlElements, in diesem Fall NewNode und AnotherNewNode Es ist nur eine Müllhalde für zusätzliche * Zeug *, aber ich muss noch lesen können es aus dem Code - es als XML zu verlassen schien die beste Option –

Antwort

1

Ich bin mir nicht sicher, warum das nicht funktioniert. Allerdings bekommen die Funktionalität, die Sie benötigen, können Sie stattdessen eine AdditionalConfig Container-Klasse für Ihre zusätzliche Elemente wie folgt vorstellen:

public class AdditionalConfig 
{ 
    [XmlAnyAttribute] 
    public XmlAttribute[] attributes; 
    [XmlAnyElement] 
    public XmlElement[] elements; 
} 

public class MyClass 
{ 
    public string AValue { get; set; } 
    public AdditionalConfig AdditionalConfig { get; set; } 
} 

[XmlAnyElement], wenn auf ein Array von XmlElement oder XElement Typen angewendet erfasst jegliche und alle unbekannten Elemente in der XML, das deserialisiert werden soll. In ähnlicher Weise erfasst [XmlAnyAttribute] bei Bedarf unbekannte Attribute des Elements <AdditionalConfig> in ein XmlAttribute Array.

Prototyp fiddle.

+0

Lovely! Ich habe angefangen, mit IXmlSerializable herumzuspielen, aber das ist viel schöner :) –

Verwandte Themen