다음을 통해 공유


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 표현을 사용 하지 않도록 설정 하거나 그렇지 않고 애플리케이션의 동작을 변경 하려면를 제공할 수 있습니다.

적용 대상