Ich versuche, eine Klasse zu serialisieren, die von einer Basisklasse erbt, die IXmlSerializable implementiert.Wie wird bei der Implementierung von IXmlSerializable in einer Basisklasse auf die 'Standard' XML-Serialisierung zurückgesetzt?
Die Basisklasse namens PropertyBag ist eine Klasse, die dynamische Eigenschaften zulässt (credits to Marc Gravell).
Ich habe IXmlSerializable implementiert, so dass die dynamischen Eigenschaften (in einem Dictionary gespeichert) als normale XML-Elemente geschrieben werden.
z.B. Wenn eine Klasse Person mit öffentlichem Eigentum (nicht dynamisch) Namen und einer dynamischen Eigenschaft Alten Serialisierung, ich mag für den folgenden XML generieren:
<Person>
<Name>Tim</Name>
<DynamicProperties>
<Country>
<string>USA</string>
</Country>
</DynamicProperties>
<Person>
ich die Rolle bekommen kann mit der folgenden Umsetzung zu arbeiten von WriteXml in der Basis PropertyBag Klasse:
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteStartElement("DynamicProperties");
// serialize every dynamic property and add it to the parent writer
foreach (KeyValuePair<string, object> kvp in properties)
{
writer.WriteStartElement(kvp.Key);
StringBuilder itemXml = new StringBuilder();
using (XmlWriter itemWriter = XmlWriter.Create(itemXml))
{
// serialize the item
XmlSerializer xmlSer = new XmlSerializer(kvp.Value.GetType());
xmlSer.Serialize(itemWriter, kvp.Value);
// read in the serialized xml
XmlDocument doc = new XmlDocument();
doc.LoadXml(itemXml.ToString());
// write to modified content to the parent writer
writer.WriteRaw(doc.DocumentElement.OuterXml);
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
wenn jedoch die Person Klasse serialisiert, ist es nicht serialisiert mehr den normalen (nicht dynamisch) Eigenschaften, wenn ich die Methode WriteXml in Person (was ich will nicht tun, überschreiben). Gibt es eine Möglichkeit, dass ich in der Basisklasse automatisch die statischen Eigenschaften hinzufügen kann? Ich weiß, dass ich dies manuell über Reflektion tun kann, aber ich habe mich gefragt, ob es eine eingebaute Funktionalität im .Net Framework gibt?
Ich denke, Sie sollten das Wort "statisch" vermeiden, da das eine andere (sehr unterschiedliche) Bedeutung hat ... –