Aracılığıyla paylaş


Şema İçeri ve Dışarı Aktarma

Windows Communication Foundation (WCF), yeni bir serileştirme altyapısı DataContractSerializeriçerir. , DataContractSerializer .NET Framework nesneleri ve XML (her iki yönde de) arasında çevrilir. WCF, seri hale getiricinin kendisine ek olarak ilişkili şema içeri aktarma ve şema dışarı aktarma mekanizmalarını içerir. Şema , seri hale getiricinin ürettiği veya seri durumdan çıkarıcının erişebildiği XML şeklinin resmi, hassas ve makine tarafından okunabilir bir açıklamasıdır. WCF, çok sayıda üçüncü taraf platformla birlikte çalışabilen şema gösterimi olarak World Wide Web Consortium (W3C) XML Şema tanım dilini (XSD) kullanır.

Şema içeri aktarma bileşeni, XsdDataContractImporterbir XSD şema belgesi alır ve serileştirilmiş formların verilen şemaya karşılık gelmesi için .NET Framework sınıfları (normalde veri sözleşmesi sınıfları) oluşturur.

Örneğin, aşağıdaki şema parçası:

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"))

aşağıdaki türü oluşturur (daha iyi okunabilirlik için biraz basitleştirilmiştir).

[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

Oluşturulan türün çeşitli veri sözleşmesi en iyi yöntemlerini izlediğini unutmayın (En İyi Yöntemler: Veri Sözleşmesi Sürüm Oluşturma bölümünde bulunur):

  • türü arabirimini IExtensibleDataObject uygular. Daha fazla bilgi için bkz . İletme Uyumlu Veri Sözleşmeleri.

  • Veri üyeleri, özel alanları sarmalayan genel özellikler olarak uygulanır.

  • sınıfı kısmi bir sınıftır ve oluşturulan kod değiştirilmeden eklemeler yapılabilir.

, XsdDataContractExporter tersini yapmanızı sağlar; ile DataContractSerializer seri hale getirilebilen türleri alır ve bir XSD Şeması belgesi oluşturur.

Aslına Uygunluk Garanti Değildir

Şemanın veya türlerin toplam aslına uygunluk ile gidiş dönüş yaptığı garanti değildir. (Gidiş dönüş, bir sınıf kümesi oluşturmak için şemayı içeri aktarmak ve sonucu dışarı aktararak şemayı yeniden oluşturmak anlamına gelir.) Aynı şema döndürülmeyebilir. İşlemin tersine çevirmenin aslına uygunluğu koruması da garanti değildir. (Şemayı oluşturmak için bir türü dışarı aktarın ve sonra türü geri içeri aktarın. Aynı türün döndürülür olması pek olası değildir.)

Desteklenen Türler

Veri sözleşmesi modeli WC3 şemasının yalnızca sınırlı bir alt kümesini destekler. Bu alt kümeye uymayan tüm şemalar içeri aktarma işlemi sırasında bir özel duruma neden olur. Örneğin, bir veri sözleşmesinin veri üyesinin XML özniteliği olarak seri hale getirileceğini belirtmenin bir yolu yoktur. Bu nedenle, XML özniteliklerinin kullanılmasını gerektiren şemalar desteklenmez ve doğru XML projeksiyonuyla veri sözleşmesi oluşturmak mümkün olmadığından içeri aktarma sırasında özel durumlara neden olur.

Örneğin, aşağıdaki şema parçası varsayılan içeri aktarma ayarları kullanılarak içeri aktarılamaz.

<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>

Daha fazla bilgi için bkz . Veri Sözleşmesi Şema Başvurusu. Bir şema veri sözleşmesi kurallarına uymuyorsa, farklı bir serileştirme altyapısı kullanın. Örneğin, kendi XmlSerializer ayrı şema içeri aktarma mekanizmasını kullanır. Ayrıca, desteklenen şema aralığının genişletildiği özel bir içeri aktarma modu vardır. Daha fazla bilgi için, Sınıfları Oluşturmak için Şemayı İçeri Aktarma bölümündeki türleri oluşturma IXmlSerializable bölümüne bakın.

ile XsdDataContractExporterDataContractSerializerseri hale getirilebilen tüm .NET Framework türlerini destekler. Daha fazla bilgi için bkz . Veri Sözleşmesi Seri Hale Getiricisi Tarafından Desteklenen Türler. kullanılarak oluşturulan şemanın XsdDataContractExporter normalde kullanabileceği geçerli veriler XsdDataContractImporter olduğunu unutmayın (şemayı özelleştirmek için kullanılmadığı sürece XmlSchemaProviderAttribute ).

kullanma XsdDataContractImporterhakkında daha fazla bilgi için bkz . Sınıf Oluşturmak için Şemayı İçeri Aktarma.

kullanma XsdDataContractExporterhakkında daha fazla bilgi için bkz . Sınıflardan Şemaları Dışarı Aktarma.

Ayrıca bkz.