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

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

示例

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:\temp\SerializationOverview.xml”替换为包含序列化数据的文件的名称。 有关序列化数据的详细信息,请参阅如何将对象数据写入 XML 文件 (C#)

类必须有一个公共的无参数构造函数。

只有公共属性和字段才会进行反序列化。

可靠编程

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

  • 进行序列化的类没有公共的无参数构造函数。

  • 文件中的数据不表示要进行反序列化的类中的数据。

  • 该文件不存在 (IOException)。

.NET 安全性

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

请参阅