使用 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:
在 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
只會執行淺層串行化。 如果您也想要串行化物件或子物件的私用變數,則必須使用深層串行化。