共用方式為


System.Runtime.Serialization.DataContractAttribute 類別

本文提供此 API 參考文件的補充備註。

DataContractAttribute 屬性套用至在 DataContractSerializer 中進行串行化和還原串行化作業時使用的型別(類別、結構或列舉型別)。 如果您使用 Windows Communication Foundation (WCF) 基礎結構來傳送或接收訊息,則也應該將套用 DataContractAttribute 至保存及處理訊息中所傳送數據的任何類別。 如需資料合約的詳細資訊,請參閱使用資料合約

您也必須將 DataMemberAttribute 套用到保存您想要序列化的值的任何欄位、屬性或事件。 藉由套用 DataContractAttribute,您可以明確啟用 DataContractSerializer 來序列化和反序列化數據。

謹慎

您可以將 DataMemberAttribute 套用到私人欄位。 請注意,欄位傳回的數據(即使為私有)已序列化和反序列化,因此可由惡意使用者或程序檢視或攔截。

如需數據合約的詳細資訊,請參閱 使用數據合約中所列的主題。

資料合約

數據合約是一組欄位的抽象描述,其中包含每個欄位的名稱和數據類型。 數據合約存在於任何單一實作之外,可讓不同平臺上的服務互作。 只要服務之間傳遞的數據符合相同的合約,所有服務都可以處理數據。 此處理也稱為 鬆散結合的系統。 數據合約也與介面類似,該合約會指定數據必須如何傳遞,以便應用程式處理數據。 例如,數據合約可能會呼叫名為 「Person」 的數據類型,該數據類型有兩個文字欄位,名為 「FirstName」 和 「LastName」。 若要建立數據合約,請將 套用 DataContractAttribute 至 類別,並將 套用 DataMemberAttribute 至必須串行化的任何字段或屬性。 串行化時,數據會符合隱含內建在 型別中的數據合約。

備註

數據合約與其繼承行為中的實際介面有很大的差異。 介面會被任何衍生型別繼承。 當您將 套用 DataContractAttribute 至基類時,衍生型別不會繼承 屬性或行為。 不過,如果衍生類型具有數據合約,則會串行化基類的數據成員。 不過,您必須將 套用 DataMemberAttribute 至衍生類別中的新成員,使其可串行化。

XML 架構檔和 SvcUtil 工具

如果您要與其他服務交換數據,則必須描述數據合約。 針對的目前版本 DataContractSerializer,可以使用 XML 架構來定義數據合約。 (其他形式的元數據/描述可以用於相同的用途。若要從您的應用程式建立 XML 架構,請使用 ServiceModel 元數據公用程式工具 (Svcutil.exe) 搭配 /dconly 命令行選項。 當工具的輸入是元件時,此工具預設會產生一組 XML 架構,以定義該元件中找到的所有數據合約類型。 相反地,您也可以使用 Svcutil.exe 工具來建立Visual Basic或 C# 類別定義,以符合使用可由數據合約表示之建構的 XML 架構需求。 在此情況下,不需要 /dconly 命令行選項。

如果 Svcutil.exe 工具的輸入是 XML 架構,則此工具預設會建立一組類別。 如果您檢查這些類別,您會發現 DataContractAttribute 已套用 。 您可以使用這些類別來建立新的應用程式,以處理必須與其他服務交換的數據。

您也可以針對傳回 Web 服務描述語言 (WSDL) 檔的端點執行此工具,以自動產生程式代碼和設定,以建立 Windows Communication Foundation (WCF) 用戶端。 產生的程式代碼包含以標記的類型 DataContractAttribute

重複使用現有的類型

數據合約有兩個基本需求:穩定的名稱和成員清單。 穩定名稱是由命名空間統一資源標識碼(URI)和合約的本機名稱所組成。 根據預設,當您將 套用 DataContractAttribute 至類別時,它會使用類別名稱作為本機名稱,而類別的命名空間(前面加上 "http://schemas.datacontract.org/2004/07/"開頭)作為命名空間 URI。 您可以藉由設定 NameNamespace 屬性來覆寫預設值。 您也可以透過將 ContractNamespaceAttribute 套用至命名空間來變更命名空間。 當您已有一個完全符合您需求的數據處理類型,但該類型的命名空間和類別名稱與數據合約不同時,請使用這項功能。 藉由覆寫預設值,您可以重複使用現有的類型,並讓串行化的數據符合數據合約。

備註

在任何程式代碼中,您可以使用單字 DataContract ,而不是較長的 DataContractAttribute

版本控制

數據合約也可以容納較新版本本身。 也就是說,當較新版本的合約包含額外的數據時,該數據會儲存並傳回給傳送者未受影響。 若要這樣做,請實作 IExtensibleDataObject 介面。

如需版本設定的詳細資訊,請參閱 數據合約版本控制