我正在尝试序列化一个继承自实现IXmlSerializable的基类的类.
名为PropertyBag的基类是一个允许动态属性的类(Marc Gravell的学分).
我实现了IXmlSerializable,以便将动态属性(存储在Dictionary中)写为普通的xml元素.
例如,当序列化具有公共属性(非动态)名称和动态属性Age的类时,我希望它生成以下XML:
<Person>
<Name>Tim</Name>
<DynamicProperties>
<Country>
<string>USA</string>
</Country>
</DynamicProperties>
<Person>
Run Code Online (Sandbox Code Playgroud)
我可以让部分在基础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 …Run Code Online (Sandbox Code Playgroud)