共用方式為


使用 Visual C# 將物件串行化為 XML

本文提供如何使用 Visual C# 將物件串行化為 Extensible Markup Language (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 只會執行淺層串行化。 如果您也想要串行化物件或子物件的私用變數,則必須使用深層串行化。