若要從數據合約模型中使用的類別產生 XML 架構定義語言 (XSD) 架構,請使用 類別 XsdDataContractExporter 。 本主題描述建立架構的程式。
匯出程式
架構導出過程從一種或多種類型開始,並產生 XmlSchemaSet,描述這些類型的 XML 投影。
XmlSchemaSet是 .NET Framework 架構物件模型 (SOM) 的一部分,代表一組 XSD 架構檔。 若要從 XmlSchemaSet建立 XSD 檔,請使用 類別 Schemas 的 XmlSchemaSet 屬性的架構集合。 然後使用 XmlSchema 序列化每個 XmlSerializer 物件。
匯出架構
創建XsdDataContractExporter的實例。
選擇性。 將XmlSchemaSet傳入建構函式。 在此情況下,在架構匯出期間產生的架構會新增至這個 XmlSchemaSet 實例,而不是從空白 XmlSchemaSet開始。
選擇性。 呼叫其中 CanExport 一個方法。 方法會決定是否可以匯出指定的型別。 方法在下一個步驟中具有與
Export方法相同的多載。呼叫其中 Export 一個方法。 有三個函數多載,可以接受Type,List<T>型別的
Type物件,或List<T>型別的Assembly物件。 在最後一個案例中,會匯出所有指定元件中的所有類型。多次呼叫
Export方法會導致多個項目被新增至相同的XmlSchemaSet。 如果類型已經存在於XmlSchemaSet中,則不會生成。 因此,在相同的Export上多次呼叫XsdDataContractExporter,比創建多個XsdDataContractExporter類別的實例更好。 這可避免產生重複的架構類型。備註
如果在匯出期間發生錯誤,則
XmlSchemaSet將處於無法預測的狀態。您可以透過 XmlSchemaSet 屬性存取 Schemas。
匯出選項
您可以將 Options 的屬性 XsdDataContractExporter 設定為類別的ExportOptions實例,以控制匯出過程的各個方面。 具體來說,您可以設定下列選項:
KnownTypes。 此集合
Type代表所匯出的型別的已知型別。 (如需詳細資訊,請參閱數據合約已知類型。)除了傳遞至Export方法的類型之外,也會Export在每個呼叫上匯出這些已知型別。DataContractSurrogate。 IDataContractSurrogate可以透過這個屬性提供 ,以自定義導出程式。 如需詳細資訊,請參閱 資料合約代理。 根據預設,不會使用 Surrogate。
輔助方法
除了其導出架構的主要角色之外,XsdDataContractExporter 還提供數個實用的輔助方法,提供類型相關的資訊。 這些包括:
GetRootElementName 方法。 這個方法會採用
Type,並傳回 XmlQualifiedName ,表示當這個型別串行化為根物件時所使用的根元素名稱和命名空間。GetSchemaTypeName 方法。 這個方法會採用
Type,並傳回 XmlQualifiedName ,表示如果這個型別匯出至架構,則會使用 XSD 架構類型的名稱。 對於 IXmlSerializable 表示為架構中匿名型別的類型,這個方法會傳null回 。GetSchemaType 方法。 這個方法只適用於 IXmlSerializable 架構中以匿名類型表示的類型,並針對所有其他類型傳
null回 。 對於匿名型別,這個方法會 XmlSchemaType 傳回 ,表示指定的Type。
匯出選項會影響所有這些方法。