IXmlSerializable.ReadXml(XmlReader) 方法

定义

从其 XML 表示形式生成对象。

public:
 void ReadXml(System::Xml::XmlReader ^ reader);
public void ReadXml (System.Xml.XmlReader reader);
abstract member ReadXml : System.Xml.XmlReader -> unit
Public Sub ReadXml (reader As XmlReader)

参数

reader
XmlReader

从中对对象进行反序列化的 XmlReader 流。

示例

下面的示例演示 了 方法的 ReadXml 实现。

virtual void ReadXml( XmlReader^ reader )
{
   personName = reader->ReadString();
}
public void ReadXml (XmlReader reader)
{
    personName = reader.ReadString();
}

下面的示例演示如何使用 XmlSerializer 类来反序列化此对象。

#using <System.Xml.dll>
#using <System.dll>
#using <Person.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml::Serialization;

int main()
{
   XmlSerializer^ serializer = gcnew XmlSerializer( Person::typeid );
   FileStream^ file = gcnew FileStream( "test.xml",FileMode::Open );
   Person^ aPerson = dynamic_cast<Person^>(serializer->Deserialize( file ));
   Console::WriteLine( aPerson );
}
using System;
using System.IO;
using System.Xml.Serialization;

public class Reader {

  public static void Main() {
    XmlSerializer serializer = new XmlSerializer(typeof(Person));
    FileStream file = new FileStream("test.xml", FileMode.Open);
    Person aPerson = (Person) serializer.Deserialize(file);
    Console.WriteLine(aPerson);
  }
}

注解

方法 ReadXml 必须使用 方法写入 WriteXml 的信息重新构造对象。

调用此方法时,读取器位于包装类型信息的开始标记上。 也就是说,直接在开始标记上指示序列化对象的开头。 此方法返回时,必须从头到尾读取整个元素,包括其所有内容。 WriteXml与 方法不同,框架不会自动处理包装元素。 实现必须执行此操作。 未能遵守这些定位规则可能会导致代码生成意外的运行时异常或损坏数据。

实现此方法时,应考虑恶意用户可能提供格式正常但无效的 XML 表示形式,以禁用或以其他方式更改应用程序的行为。

适用于