使用 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:
在 Visual C# 中,建立新的控制台應用程式專案。
在 [ 專案] 功能表上,選取 [新增類別 ] 以將新類別新增至專案。
在 [ 新增專案 ] 對話框中,將 類別的名稱變更為 clsPerson。
選取 [新增]。 系統會建立新的類別。
在公用類別
clsPerson
語句後面新增下列程序代碼。public string FirstName; public string MI; public string LastName;
切換至 Visual Studio 中Program.cs的程式代碼視窗。
在方法中
void Main
,宣告並建立 類別的clsPerson
實例:clsPerson p = new clsPerson();
設定物件的屬性
clsPerson
:p.FirstName = "Jeff"; p.MI = "A"; p.LastName = "Price";
命名空間
Xml.Serialization
包含將XmlSerializer
物件串行化為 XML 的類別。 當您建立 的XmlSerializer
實例時,您會將您想要串行化的類別類型傳遞至其建構函式:System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
方法
Serialize
可用來將物件串行化為 XML。 串行化已多載,而且可以將輸出傳送至TextWriter
、Stream
或XMLWriter
物件。 在此範例中,您會將輸出傳送至主控台: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
只會執行淺層串行化。 如果您也想要串行化物件或子物件的私用變數,則必須使用深層串行化。