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接口实现示例