Import a export schémat
Windows Communication Foundation (WCF) obsahuje nový serializační modul , the DataContractSerializer. Překládá DataContractSerializer
se mezi objekty rozhraní .NET Framework a XML (v obou směrech). Kromě samotného serializátoru wcf zahrnuje přidružené mechanismy importu schématu a exportu schématu. Schéma je formální, přesný a strojově čitelný popis tvaru XML, který serializátor vytvoří nebo že deserializátor má přístup. WCF jako reprezentaci schématu používá jazyk XSD (World Wide Web Consortium) XML (W3C), který je široce interoperabilní s mnoha platformami třetích stran.
Součást importu schématu přebírá XsdDataContractImporterdokument schématu XSD a generuje třídy rozhraní .NET Framework (obvykle třídy kontraktů dat), aby serializované formuláře odpovídaly danému schématu.
Například následující fragment schématu:
XsdDataContractImporter importer = new XsdDataContractImporter();
importer.Options.Namespaces.Add(new KeyValuePair<string, string>("http://schemas.contoso.com/carSchema", "Contoso.Cars"));
Dim importer As New XsdDataContractImporter
importer.Options.Namespaces.Add(New KeyValuePair(Of String, String)("http://schemas.contoso.com/carSchema", "Contoso.Cars"))
vygeneruje následující typ (zjednodušeně pro lepší čitelnost).
[DataContract]
public partial class Vehicle : IExtensibleDataObject
{
private int yearField;
private string colorField;
[DataMember]
public int year
{
get { return this.yearField; }
set { this.yearField = value; }
}
[DataMember]
public string color
{
get { return this.colorField; }
set { this.colorField = value; }
}
private ExtensionDataObject extensionDataField;
public ExtensionDataObject ExtensionData
{
get { return this.extensionDataField; }
set { this.extensionDataField = value; }
}
}
Partial Class Vehicle
Implements IExtensibleDataObject
Private yearField As Integer
Private colorField As String
<DataMember()> _
Public Property year() As Integer
Get
Return Me.yearField
End Get
Set
Me.yearField = value
End Set
End Property
<DataMember()> _
Public Property color() As String
Get
Return Me.colorField
End Get
Set
Me.colorField = value
End Set
End Property
Private extensionDataField As ExtensionDataObject
Public Property ExtensionData() As ExtensionDataObject _
Implements IExtensibleDataObject.ExtensionData
Get
Return Me.extensionDataField
End Get
Set(ByVal value As ExtensionDataObject)
Me.extensionDataField = value
End Set
End Property
End Class
Všimněte si, že vygenerovaný typ se řídí několika osvědčenými postupy pro kontrakty dat (které najdete v části Osvědčené postupy: Správa verzí kontraktů dat):
Typ implementuje IExtensibleDataObject rozhraní. Další informace najdete v tématu Kontrakty dat kompatibilní s předáváním.
Datové členy jsou implementovány jako veřejné vlastnosti, které zabalují privátní pole.
Třída je částečná třída a sčítání lze provést bez úpravy vygenerovaného kódu.
Umožňuje XsdDataContractExporter provést opak – vzít typy, které jsou serializovatelné s DataContractSerializer
dokumentem schématu XSD a vygenerovat.
Věrnost není zaručená
Není zaručeno, že schéma nebo typy tvoří kruhovou cestu s celkovou věrností. (Doba odezvy znamená import schématu pro vytvoření sady tříd a export výsledku a vytvoření schématu znovu.) Stejné schéma nemusí být vráceno. Vrácení procesu zpět také není zaručeno zachování věrnosti. (Exportujte typ, aby se vygenerovalo jeho schéma, a potom typ naimportujte zpět. Je nepravděpodobné, že se vrátí stejný typ.)
Podporované typy
Model kontraktu dat podporuje pouze omezenou podmnožinu schématu WC3. Jakékoli schéma, které nevyhovuje této podmnožině, způsobí výjimku během procesu importu. Například neexistuje způsob, jak určit, že datový člen datového kontraktu by měl být serializován jako atribut XML. Schémata, která vyžadují použití atributů XML, nejsou podporována a způsobí výjimky během importu, protože není možné vygenerovat kontrakt dat se správnou projekcí XML.
Následující fragment schématu se například nedá importovat pomocí výchozího nastavení importu.
<xs:complexType name="Vehicle">
<xs:sequence>
<xs:element name="year" type="xs:int" />
<xs:element name="color" type="xs:string" />
</xs:sequence>
<xs:attribute name="engineHorsePower" type="xs:int" />
</xs:complexType>
Další informace naleznete v tématu Referenční informace ke schématu kontraktu dat. Pokud schéma nevyhovuje pravidlům kontraktů dat, použijte jiný modul serializace. Například XmlSerializer používá vlastní samostatný mechanismus importu schématu. Existuje také speciální režim importu, ve kterém je rozšířen rozsah podporovaných schémat. Další informace najdete v části o generování IXmlSerializable typů v importu schématu pro generování tříd.
Podporuje XsdDataContractExporter
všechny typy rozhraní .NET Framework, které lze serializovat pomocí DataContractSerializer
rozhraní . Další informace naleznete v tématu Typy podporované serializátorem kontraktu dat. Všimněte si, že schéma vygenerované pomocí XsdDataContractExporter
běžně platných dat, která XsdDataContractImporter
lze použít (pokud XmlSchemaProviderAttribute se nepoužívá k přizpůsobení schématu).
Další informace o použití XsdDataContractImporternaleznete v tématu Import schématu pro generování tříd.
Další informace o použití XsdDataContractExporternaleznete v tématu Export schémat z tříd.