小编Tim*_*mel的帖子

在基类中实现IXmlSerializable时如何恢复到"默认"XML序列化?

我正在尝试序列化一个继承自实现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)

c# ixmlserializable

7
推荐指数
1
解决办法
2329
查看次数

标签 统计

c# ×1

ixmlserializable ×1