IXmlSerializable接口实现示例

2014年2月7日
IXmlSerializable接口说明

实现此接口的原因有两个。

第一个原因是要控制 XmlSerializer 对您的对象进行序列化和反序列化的方式。 例如,您可以将数据组织成字节,而不用缓冲大型数据集,还可以避免在使用 Base64 编码对数据进行编码时发生膨胀。 若要对序列化进行控制,请实现 ReadXml 和 WriteXml 方法来控制用于读写 XML 的 XmlReader 和 XmlWriter 类。 有关这种情况的示例,请参见如何:对序列化数据进行分块。
第二个原因是要能对架构进行控制。 为此,您必须将 XmlSchemaProviderAttribute 应用于可序列化的类型,并指定返回架构的静态成员的名称。 有关示例,请参见 XmlSchemaProviderAttribute。
实现此接口的类必须具有无参数构造函数。 这是 XmlSerializer 类的要求。

 

IXmlSerializable实现示例
 [Serializable]
    public class abstractAB : abstractA ,IXmlSerializable
    {

        public string test = "123123"; 
        public override string GetStirng()
        {
            return "";
        }

        public abstractAB() { }

        #region IXmlSerializable 成员

        public System.Xml.Schema.XmlSchema GetSchema()
        {
            throw new NotImplementedException();
        }

        public void ReadXml(XmlReader reader)
        {
            reader.Read();
            reader.ReadStartElement();
            reader.ReadAttributeValue();
            test = reader.Value;
            reader.Read();
            reader.ReadEndElement();
        }

        public void WriteXml(XmlWriter writer)
        {
            writer.WriteStartElement("abstractAB");
            writer.WriteStartAttribute("ClassName");
            writer.WriteValue("abstractAB");
            writer.WriteEndAttribute();
            writer.WriteValue(test);
            writer.WriteEndElement();
        }

        #endregion
    }
声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: IXmlSerializable接口实现示例
本文的评论功能被关闭了.