Estoy tratando de serializar una clase que hereda de una clase base que implementa IXmlSerializable.¿Cómo volver a la serialización XML 'predeterminada' al implementar IXmlSerializable en una clase base?
La clase base, llamada PropertyBag es una clase que permite propiedades dinámicas (credits to Marc Gravell).
Implementé IXmlSerializable para que las propiedades dinámicas (almacenadas en un Diccionario) se escriban como elementos xml normales.
p. Ej. Cuando seria una persona de clase con una propiedad pública Nombre (no dinámico) y una Edad propiedad dinámica, me gustaría para que se genere el siguiente código XML:
<Person>
<Name>Tim</Name>
<DynamicProperties>
<Country>
<string>USA</string>
</Country>
</DynamicProperties>
<Person>
puedo conseguir la pieza a trabajar con la siguiente implementación de WriteXml en la clase PropertyBag Base:
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();
}
sin embargo, cuando la serialización de la clase persona, ya no serializa los normales (no dinámico) propiedades menos que sobrescribir el método WriteXml en persona (que no quiero hacer) ¿Hay alguna forma de que en la clase base pueda agregar automáticamente las propiedades estáticas? Sé que puedo hacerlo manualmente usando la reflexión, pero me preguntaba si hay alguna funcionalidad incorporada en .Net Framework.
Creo que deberías evitar la palabra "estática", ya que tiene otro significado (muy diferente) ... –