共用方式為


可串行化類型

根據預設,DataContractSerializer 會序列化所有公開的類型。 型別的所有公用讀取/寫入屬性和欄位都會被序列化。

您可以將 DataContractAttributeDataMemberAttribute 屬性套用至類型和成員來變更預設行為。這項功能在您擁有不在控制下的型別且無法修改以新增屬性的情況下很有用。 DataContractSerializer 辨識這類「未標記」型別。

序列化預設值

您可以套用 DataContractAttributeDataMemberAttribute 屬性來明確控制或自定義型別和成員的串行化。 此外,您可以將這些屬性套用至私人欄位。 不過,即使未使用這些屬性標示的類型也會序列化和反序列化。 適用下列規則和例外狀況:

  • DataContractSerializer 從未标註屬性的類型推斷數據合約,並使用新建立類型的預設屬性。

  • 除非您將 get 屬性套用至該成員,否則所有公用set字段以及具有公用IgnoreDataMemberAttribute方法的屬性都會被序列化。

  • 串行化語意類似於的 XmlSerializer語意。

  • 在未標記的類型中,只有具有沒有參數之建構函式的公用類型會串行化。 此規則的例外狀況是與 ExtensionDataObject 介面搭配使用 IExtensibleDataObject

  • 唯讀欄位、不含 getset 方法的屬性,以及具有內部或私 set 用或 get 方法的屬性不會串行化。 這些屬性會被忽略,而且不會擲出例外狀況,但僅在僅可讀集合的情況下是例外。

  • XmlSerializer 會忽略屬性(例如 XmlElementXmlAttributeXmlIgnoreXmlInclude等等)。

  • 如果您未將 DataContractAttribute 屬性套用至指定的類型,串行化程式會忽略套用屬性之 DataMemberAttribute 該類型中的任何成員。

  • 屬性 KnownTypes 在未以 屬性標示的類型 DataContractAttribute 中受到支援。 這包括對未標記類型的屬性支援 KnownTypeAttribute

  • 若要「退出」公用成員、屬性或字段的串行化程式,請將 IgnoreDataMemberAttribute 屬性套用至該成員。

遺產

未標記的類型(不含 DataContractAttribute 屬性的類型)可以繼承自具有此屬性的類型;不過,不允許反向:具有 屬性的類型無法繼承自未標記的類型。 此規則主要是為了確保回溯相容性與舊版 .NET Framework 中撰寫的程序代碼相容。

另請參閱