如何:从 XML 文件读取对象数据(C# 和 Visual Basic)

此示例使用 XmlSerializer 类读取以前写入 XML 文件的对象数据。

示例

此代码示例也可用作 IntelliSense 代码段。 在代码段选择器中,此代码示例位于**“XML”**中。 有关更多信息,请参见 代码段

Public Class Book
    Public Title As String 
End Class 

Public Sub ReadXML()
    Dim reader As New System.Xml.Serialization.XmlSerializer(GetType(Book))
    Dim file As New System.IO.StreamReader(
        "c:\temp\SerializationOverview.xml")
    Dim overview As Book
    overview = CType(reader.Deserialize(file), Book)
    Console.WriteLine(overview.Title)
End Sub
public class Book
{
    public String title;
}       

public void ReadXML()
{
    // First write something so that there is something to read ... 
    var b = new Book { title = "Serialization Overview" };
    var writer = new System.Xml.Serialization.XmlSerializer(typeof(Book));
    var wfile = new System.IO.StreamWriter(@"c:\temp\SerializationOverview.xml");
    writer.Serialize(wfile, b);
    wfile.Close();

    // Now we can read the serialized book ...
    System.Xml.Serialization.XmlSerializer reader = 
        new System.Xml.Serialization.XmlSerializer(typeof(Book));
    System.IO.StreamReader file = new System.IO.StreamReader(
        @"c:\temp\SerializationOverview.xml");
    Book overview =  (Book)reader.Deserialize(file);
    file.Close();

    Console.WriteLine(overview.title);

}

编译代码

用包含序列化数据的文件的名称替代文件名“c:\IntroToVB.xml”。 有关序列化数据的更多信息,请参见 如何:将对象数据写入 XML 文件(C# 和 Visual Basic)

该类必须具有无参数的公共构造函数。

只有公共属性和字段被反序列化。

可靠编程

以下情况可能会导致异常:

  • 正被序列化的类不具有无参数的公共构造函数。

  • 文件中的数据不表示来自要被反序列化的类的数据。

  • 该文件不存在 (IOException)。

安全性

应始终验证输入内容,且决不对来自不受信任源的数据进行反序列化。 重新创建的对象在本地计算机上运行,其权限与将其反序列化的代码的权限相同。 在应用程序中使用输入的数据之前,需验证所有的输入内容。

请参见

任务

如何:将对象数据写入 XML 文件(C# 和 Visual Basic)

参考

StreamWriter

概念

C# 编程指南

其他资源

序列化(C# 和 Visual Basic)

Visual Basic 编程指南