使用 Visual C# 将对象序列化为 XML

本文提供了有关如何使用 Visual C# 将对象序列化为可扩展标记语言 (XML) 的方法。

原始产品版本: Visualstudio
原始 KB 编号: 815813

摘要

本文中所述的方法对于保留对象的状态非常有用。 方法还可用于通过将 XML 反序列化回新对象来克隆对象。

本文介绍了以下 Microsoft .NET Framework 类库命名空间:

  • System.Xml
  • System.Xml.Serialization

要求

本文假设你熟悉以下主题:

  • Visual Studio
  • 大致熟悉 XML
  • 大致熟悉 Visual C#

XML 序列化

序列化是采用对象状态并以某种方式保留它的过程。 .NET Framework包括可以将任何对象序列化为 XML 的强大对象。 命名空间 System.Xml.Serialization 提供此功能。

按照以下步骤创建一个控制台应用程序,该应用程序创建对象,然后将其状态序列化为 XML:

  1. 在 Visual C# 中,创建新的控制台应用程序项目。

  2. 在“ 项目 ”菜单上,选择“ 添加类 ”,将新类添加到项目。

  3. 在“ 添加新项 ”对话框中,将 类的名称更改为 clsPerson

  4. 选择“添加”。 将创建一个新类。

  5. 在公共类 clsPerson 语句后面添加以下代码。

    public string FirstName;
    public string MI;
    public string LastName;
    
  6. 切换到 Visual Studio 中 Program.cs 的代码窗口。

  7. 在 方法中 void Main ,声明并创建 类的 clsPerson 实例:

    clsPerson p = new clsPerson();
    
  8. 设置 对象的属性 clsPerson

    p.FirstName = "Jeff";
    p.MI = "A";
    p.LastName = "Price";
    
  9. 命名空间 Xml.Serialization 包含一个 XmlSerializer 类,该类将对象序列化为 XML。 创建 实例 XmlSerializer时,将要序列化的类的类型传递到其构造函数中:

    System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
    
  10. 方法 Serialize 用于将对象序列化为 XML。 序列化已重载,可以将输出发送到 TextWriterStreamXMLWriter 对象。 在此示例中,将输出发送到控制台:

    x.Serialize(Console.Out,p);
    Console.WriteLine();
    Console.ReadLine();
    

完整代码列表

using System;

public class clsPerson
{
    public  string FirstName;
    public  string MI;
    public  string LastName;
}

class class1
{
    static void Main(string[] args)
    {
        clsPerson p=new clsPerson();
        p.FirstName = "Jeff";
        p.MI = "A";
        p.LastName = "Price";
        System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
        x.Serialize(Console.Out, p);
        Console.WriteLine();
        Console.ReadLine();
    }
}

验证

若要验证项目是否正常工作,请按 Ctrl+F5 运行项目。 创建 clsPerson 对象并使用输入的值填充。 此状态序列化为 XML。 控制台窗口显示以下代码:

<?xml version="1.0" encoding="IBM437"?>
<clsPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <FirstName>Jeff</FirstName>
    <MI>A</MI>
    <LastName>Price</LastName>
</clsPerson>

疑难解答

对象 Xml.Serialization.XmlSerializer 仅执行浅层序列化。 如果还想要序列化对象或子对象的私有变量,则必须使用深度序列化。