Próbuję serializować klasę, która dziedziczy z klasy bazowej, która implementuje IXmlSerializable.Jak powrócić do "domyślnej" serializacji XML podczas wdrażania IXmlSerializable w klasie bazowej?
Podstawowa klasa o nazwie PropertyBag jest klasą, która umożliwia właściwości dynamiczne (credits to Marc Gravell).
Zaimplementowałem IXmlSerializable, aby właściwości dynamiczne (przechowywane w słowniku) były zapisywane jako normalne elementy xml.
np. Kiedy szeregowania klasę osoba z mienia publicznego (non dynamicznego) Nazwa i właściwości dynamicznej Age, chciałbym na to, aby generować następujące XML:
<Person>
<Name>Tim</Name>
<DynamicProperties>
<Country>
<string>USA</string>
</Country>
</DynamicProperties>
<Person>
mogę dostać część do pracy z następującym realizacji z WriteXml w klasie bazowej PropertyBag:
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();
}
jednak, gdy szeregowania klasę Person, to już nie serializes normalne (nie dynamiczny) właściwości, chyba że nadpisać metodę WriteXml osobiście (co nie chcę zrobić). Czy jest jakiś sposób, że w klasie bazowej mogę automatycznie dodać właściwości statyczne? Wiem, że mogę to zrobić ręcznie za pomocą refleksji, ale zastanawiałem się, czy jest jakaś wbudowana funkcjonalność w .Net Framework?
Myślę, że powinieneś unikać słowa "statyczny", ponieważ ma ono inne (bardzo różne) znaczenie ... –