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

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

原始产品版本: Visual Studio
原始 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 对象仅执行浅层序列化。 如果还需要序列化对象或子对象的私有变量,则必须使用深度序列化。