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 ile XML arasında çeviri yapar (her iki yönde). 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):

XsdDataContractExporter ile tersini yapmanızı sağlar—DataContractSerializer ile serileştirilebilen türleri alır ve bir XSD Şeması belgesi üretir.

Doğruluk Garantisi Yoktur

Şema veya türlerin tutarlı bir şekilde gidiş dönüş yaptığı garanti edilmez. ( 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. İşlemi tersine çevirmek aslına uygunluğu koruma garantisi vermez. (Ş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, XmlSerializer kendine ait ayrı bir ş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çinIXmlSerializable bölümündeki türleri oluşturma bölümüne bakın.

XsdDataContractExporter, DataContractSerializer ile serileştirilebilen 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. Dikkat edin ki XsdDataContractExporter kullanılarak oluşturulan şema, XsdDataContractImporter şemayı özelleştirmek için kullanılmadığı sürece, normalde XmlSchemaProviderAttribute tarafından kullanılabilecek geçerli verilerdir.

XsdDataContractImporter kullanma hakkında daha fazla bilgi için bakınız Sınıf Oluşturmak için Şemayı İçeri Aktarma.

XsdDataContractExporter kullanımı hakkında daha fazla bilgi için bakınız Sınıflardan Şemaları Dışarı Aktarma.

Ayrıca bakınız