我正在尝试序列化从实现 IXmlSerializable 的基类继承的类。
名为 PropertyBag 的基类是一个允许动态属性的类(Marc Gravell 的功劳)。
我实现了 IXmlSerializable 以便将动态属性(存储在字典中)写为普通的 xml 元素。
例如,当使用公共属性(非动态)名称和动态属性 Age 序列化 Person 类时,我希望它生成以下 XML:
<Person>
<Name>Tim</Name>
<DynamicProperties>
<Country>
<string>USA</string>
</Country>
</DynamicProperties>
<Person>
我可以让部件与基 PropertyBag 类中的以下 WriteXml 实现一起工作:
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();
}
但是,在序列化 Person 类时,它不再序列化普通(非动态)属性,除非我覆盖 Person 中的 WriteXml 方法(我不想这样做)。有什么方法可以在基类中自动添加静态属性?我知道我可以使用反射手动执行此操作,但我想知道 .Net 框架中是否有一些内置功能?