Sınıf Oluşturmak için Şemayı İçe Aktarma

Windows Communication Foundation (WCF) ile kullanılabilen şemalardan sınıflar oluşturmak için sınıfını XsdDataContractImporter kullanın. Bu konu, süreci ve varyasyonları açıklar.

İçeri Aktarma İşlemi

Şema içeri aktarma işlemi ile XmlSchemaSet başlar ve oluşturur CodeCompileUnit.

XmlSchemaSet, .NET Framework'ün Şema Nesne Modeli'nin (SOM) xml şema tanım dili (XSD) şema belgeleri kümesini temsil eden bir parçasıdır. Bir XSD belge kümesinden nesne XmlSchemaSet oluşturmak için, her belgeyi bir XmlSchema nesne olarak seri durumdan XmlSerializerçıkararak (kullanarak) ve bu nesneleri yeni XmlSchemaSetbir öğesine ekleyin.

, CodeCompileUnit .NET Framework'ün .NET Framework kodunu soyut bir şekilde temsil eden Kod Belgesi Nesne Modeli'nin (CodeDOM) bir parçasıdır. bir öğesinden CodeCompileUnitgerçek kodu oluşturmak için veya VBCodeProvider sınıfı gibi sınıfın CodeDomProvider bir alt sınıfını CSharpCodeProvider kullanın.

Şemayı içeri aktarmak için

  1. XsdDataContractImporter nesnesinin bir örneğini oluşturun.

  2. isteğe bağlı. Oluşturucuya bir CodeCompileUnit geçirin. Şema içeri aktarma sırasında oluşturulan türler, boş CodeCompileUnitbir ile başlamak yerine bu CodeCompileUnit örneğe eklenir.

  3. isteğe bağlı. Yöntemlerden birini çağırın CanImport . yöntemi, verilen şemanın geçerli bir veri sözleşmesi şeması olup olmadığını belirler ve içeri aktarılabilir. yöntemi, CanImport (sonraki adım) ile Import aynı aşırı yüklemelere sahiptir.

  4. Aşırı yüklenmiş Import yöntemlerden birini çağırın, örneğin yöntemi Import(XmlSchemaSet) .

    En basit aşırı yükleme bir XmlSchemaSet alır ve bu şema kümesinde bulunan anonim türler de dahil olmak üzere tüm türleri içeri aktarır. Diğer aşırı yüklemeler, XSD türünü veya içeri aktarılacak türlerin listesini (bir veya bir nesne koleksiyonu biçiminde XmlQualifiedName ) belirtmenize XmlQualifiedName olanak sağlar. Bu durumda, yalnızca belirtilen türler içeri aktarılır. Aşırı yükleme, belirli bir öğeyi öğesinden ve ilişkili türünden XmlSchemaSet(anonim olsun veya olmasın) içeri aktaran bir XmlSchemaElement alır. Bu aşırı yükleme, bu öğe için oluşturulan türün veri sözleşmesi adını temsil eden bir XmlQualifiedNamedöndürür.

    Yöntemin Import birden çok çağrısı aynı öğesine birden çok öğe eklenmesine CodeCompileUnitneden oldu. zaten varsa içinde bir tür oluşturulmaz CodeCompileUnit . Birden çok nesne kullanmak yerine aynı XsdDataContractImporter anda birden çok XsdDataContractImporter kez çağırınImport. Yinelenen türlerin oluşturulmasını önlemenin önerilen yolu budur.

    Not

    İçeri aktarma sırasında bir hata olursa, CodeCompileUnit tahmin edilemeyen bir durumda olur. Başarısız içeri aktarma işleminden kaynaklanan bir CodeCompileUnit sonuç kullanmak, güvenlik açıklarına maruz kalmanıza neden olabilir.

  5. özelliği aracılığıyla öğesine CodeCompileUnit erişin CodeCompileUnit .

İçeri Aktarma Seçenekleri: Oluşturulan Türleri Özelleştirme

İçeri aktarma işleminin OptionsXsdDataContractImporter çeşitli yönlerini denetlemek için öğesinin ImportOptions özelliğini sınıfının bir örneğine ayarlayabilirsiniz. Bir dizi seçenek, oluşturulan türleri doğrudan etkiler.

Erişim Düzeyini Denetleme (GenerateInternal veya /internal anahtarı)

Bu, ServiceModel Meta Veri Yardımcı Programı Aracı'nda (Svcutil.exe) /internal anahtarına karşılık gelir.

Normalde, genel türler özel alanlar ve eşleşen ortak veri üyesi özellikleriyle şemadan oluşturulur. Bunun yerine iç türler oluşturmak için özelliğini olarak trueayarlayınGenerateInternal.

Aşağıdaki örnekte, özellik olarak ayarlandığında iç sınıfa GenerateInternal dönüştürülmüş bir şema gösterilmektedir true.

[DataContract]
internal partial class Vehicle : IExtensibleDataObject
{
    private int yearField;
    private string colorField;

    [DataMember]
    internal int year
    {
        get { return this.yearField; }
        set { this.yearField = value; }
    }
    [DataMember]
    internal string color
    {
        get { return this.colorField; }
        set { this.colorField = value; }
    }

    private ExtensionDataObject extensionDataField;
    public ExtensionDataObject ExtensionData
    {
        get { return this.extensionDataField; }
        set { this.extensionDataField = value; }
    }
}
Class Vehicle
    Implements IExtensibleDataObject
    Private yearField As Integer
    Private colorField As String

    <DataMember()> _
    Friend Property year() As Integer
        Get
            Return Me.yearField
        End Get
        Set
            Me.yearField = value
        End Set
    End Property

    <DataMember()> _
    Friend 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

Ad Alanlarını Denetleme (Ad Alanları veya /namespace anahtarı)

Bu, araç üzerindeki /namespace anahtarına Svcutil.exe karşılık gelir.

Normalde, şemadan oluşturulan türler Veri Sözleşmesi Şema Başvurusu'nda açıklanan eşlemeye göre belirli bir .NET Framework ad alanına karşılık gelen her XSD ad alanıyla .NET Framework ad alanlarına oluşturulur. Bu eşlemeyi özelliğiyle Namespaces bir Dictionary<TKey,TValue>ile özelleştirebilirsiniz. Sözlükte belirli bir XSD ad alanı bulunursa eşleşen .NET Framework ad alanı da sözlüğünüzden alınır.

Örneğin, aşağıdaki şemayı göz önünde bulundurun.

<xs:schema targetNamespace="http://schemas.contoso.com/carSchema">
  <xs:complexType name="Vehicle">
    <!-- details omitted... -->
  </xs:complexType>
</xs:schema>

Aşağıdaki örnek, ad alanını "Contoso.Cars" ile eşlemek http://schemas.contoso.com/carSchema için özelliğini kullanırNamespaces.

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

SerializableAttribute ekleme (GenerateSerializable veya /serializable anahtarı)

Bu, araç üzerindeki /serializable anahtarına Svcutil.exe karşılık gelir.

Bazen şemadan oluşturulan türlerin .NET Framework çalışma zamanı serileştirme altyapılarıyla kullanılabilir olması önemlidir. Bu, .NET Framework uzaktan iletişim türleri kullanılırken kullanışlıdır. Bunu etkinleştirmek için, özniteliğini SerializableAttribute normal DataContractAttribute özniteliğine ek olarak oluşturulan türlere uygulamanız gerekir. İçeri aktarma seçeneği olarak ayarlanırsa GenerateSerializabletrueözniteliği otomatik olarak oluşturulur.

Aşağıdaki örnekte, içeri aktarma seçeneği olarak ayarlanmış şekilde oluşturulan sınıf gösterilmektedir Vehicletrue.GenerateSerializable

[DataContract]
[Serializable]
public partial class Vehicle : IExtensibleDataObject
{
    // Code not shown.
    public ExtensionDataObject ExtensionData
    {
        get
        {
            throw new Exception("The method or operation is not implemented.");
        }
        set
        {
            throw new Exception("The method or operation is not implemented.");
        }
    }
}
<DataContract(), Serializable()> _
Partial Class Vehicle
    Implements IExtensibleDataObject
    Private extensionDataField As ExtensionDataObject

    ' Code not shown.

    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

Veri Bağlama Desteği Ekleme (EnableDataBinding veya /enableDataBinding anahtarı)

Bu, Svcutil.exe aracındaki /enableDataBinding anahtarına karşılık gelir.

Bazen, şemadan oluşturulan türleri grafik kullanıcı arabirimi bileşenlerine bağlamak isteyebilirsiniz, böylece bu türlerin örneklerine yapılan tüm güncelleştirmeler kullanıcı arabirimini otomatik olarak güncelleştirir. , XsdDataContractImporter herhangi bir özellik değişikliğinin INotifyPropertyChanged bir olayı tetiklemesi için arabirimi uygulayan türler oluşturabilir. Bu arabirimi (Windows Presentation Foundation (WPF) destekleyen bir istemci kullanıcı arabirimi programlama ortamıyla kullanmak üzere türler oluşturuyorsanız, bu özelliği etkinleştirmek için true özelliğini ayarlayınEnableDataBinding.

Aşağıdaki örnekte, olarak ayarlanmış trueolarak EnableDataBinding oluşturulan sınıf gösterilmektedirVehicle.

[DataContract]
public partial class Vehicle : IExtensibleDataObject, INotifyPropertyChanged
{
    private int yearField;
    private string colorField;

    [DataMember]
    public int year
    {
        get { return this.yearField; }
        set
        {
            if (this.yearField.Equals(value) != true)
            {
                this.yearField = value;
                this.RaisePropertyChanged("year");
            }
        }
    }
    [DataMember]
    public string color
    {
        get { return this.colorField; }
        set
        {
            if (this.colorField.Equals(value) != true)
            {
                this.colorField = value;
                this.RaisePropertyChanged("color");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler propertyChanged =
this.PropertyChanged;
        if (propertyChanged != null)
        {
            propertyChanged(this,
new PropertyChangedEventArgs(propertyName));
        }
    }

    private ExtensionDataObject extensionDataField;
    public ExtensionDataObject ExtensionData
    {
        get { return this.extensionDataField; }
        set { this.extensionDataField = value; }
    }
}
Partial Class Vehicle
    Implements IExtensibleDataObject, INotifyPropertyChanged
    Private yearField As Integer
    Private colorField As String

    <DataMember()> _
    Public Property year() As Integer
        Get
            Return Me.yearField
        End Get
        Set
            If Me.yearField.Equals(value) <> True Then
                Me.yearField = value
                Me.RaisePropertyChanged("year")
            End If
        End Set
    End Property

    <DataMember()> _
    Public Property color() As String
        Get
            Return Me.colorField
        End Get
        Set
            If Me.colorField.Equals(value) <> True Then
                Me.colorField = value
                Me.RaisePropertyChanged("color")
            End If
        End Set
    End Property

    Public Event PropertyChanged As PropertyChangedEventHandler _
      Implements INotifyPropertyChanged.PropertyChanged

    Private Sub RaisePropertyChanged(ByVal propertyName As String)
        RaiseEvent PropertyChanged(Me, _
         New PropertyChangedEventArgs(propertyName))
    End Sub

    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

İçeri Aktarma Seçenekleri: Koleksiyon Türlerini Seçme

XML'deki iki özel desen, öğe koleksiyonlarını temsil eder: öğe listeleri ve bir öğe ile diğer öğe arasındaki ilişkilendirmeler. Aşağıda, dize listesinin bir örneği verilmiştir.

<People>
  <person>Alice</person>
  <person>Bob</person>
  <person>Charlie</person>
</People>

Aşağıda, bir dize ile tamsayı (city name ve ) arasındaki ilişkilendirme örneği verilmiştir population.

<Cities>
  <city>
    <name>Auburn</name>
    <population>40000</population>
  </city>
  <city>
    <name>Bellevue</name>
    <population>80000</population>
  </city>
  <city>
    <name>Cedar Creek</name>
    <population>10000</population>
  </city>
</Cities>

Not

Tüm ilişkilendirmeler de liste olarak kabul edilebilir. Örneğin, önceki ilişkilendirmeyi iki alanı (dize alanı ve tamsayı alanı) olan karmaşık city nesnelerin listesi olarak görüntüleyebilirsiniz. Her iki desenin de XSD Şemasında bir gösterimi vardır. Liste ile ilişkilendirme arasında ayrım yapmak için bir yol yoktur, bu nedenle şemada WCF'ye özgü özel bir ek açıklama olmadığı sürece bu tür desenler her zaman liste olarak değerlendirilir. Ek açıklama, belirli bir desenin bir ilişkilendirmeyi temsil ettiğini gösterir. Daha fazla bilgi için bkz . Veri Sözleşmesi Şema Başvurusu.

Normalde, bir liste, şemanın koleksiyonlar için standart adlandırma desenini kullanıp izlemediğine bağlı olarak, Genel Listeden veya .NET Framework dizisinden türetilen bir koleksiyon veri sözleşmesi olarak içeri aktarılır. Bu, Veri Sözleşmelerindeki Koleksiyon Türleri bölümünde daha ayrıntılı olarak açıklanmıştır. İlişkilendirmeler normalde sözlük nesnesinden türetilen bir Dictionary<TKey,TValue> veya koleksiyon veri sözleşmesi olarak içeri aktarılır. Örneğin, aşağıdaki şemayı göz önünde bulundurun.

<xs:complexType name="Vehicle">
  <xs:sequence>
    <xs:element name="year" type="xs:int"/>
    <xs:element name="color" type="xs:string"/>
    <xs:element name="passengers" type="people"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="people">
  <xs:sequence>
    <xs:element name="person" type="xs:string" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

Bu, aşağıdaki gibi içeri aktarılır (okunabilirlik özellikleri yerine alanlar gösterilir).

[DataContract]
public partial class Vehicle : IExtensibleDataObject
{
    [DataMember] public int yearField;
    [DataMember] public string colorField;
    [DataMember] public people passengers;

    // Other code not shown.

    public ExtensionDataObject ExtensionData
    {
        get
        {
            throw new Exception("The method or operation is not implemented.");
        }
        set
        {
            throw new Exception("The method or operation is not implemented.");
        }
    }
}
[CollectionDataContract(ItemName = "person")]
public class people : List<string> { }
Public Partial Class Vehicle
    Implements IExtensibleDataObject

    <DataMember()> _
    Public yearField As Integer
    <DataMember()> _
    Public colorField As String
    <DataMember()> _
    Public passengers As people

    ' Other code not shown.

    Public Property ExtensionData() As ExtensionDataObject _
    Implements IExtensibleDataObject.ExtensionData
        Get
            Throw New Exception("The method or operation is not implemented.")
        End Get
        Set
            Throw New Exception("The method or operation is not implemented.")
        End Set
    End Property
End Class

<CollectionDataContract(ItemName:="person")> _
Public Class people
    Inherits List(Of String)
End Class

Bu tür şema desenleri için oluşturulan koleksiyon türlerini özelleştirmek mümkündür. Örneğin, türü bir liste kutusuna bağlamak ve koleksiyon içeriği değiştiğinde otomatik olarak güncelleştirilmesini sağlamak için sınıfı yerine List<T> öğesinden BindingList<T> türetilen koleksiyonlar oluşturmak isteyebilirsiniz. Bunu yapmak için sınıfının özelliğini ImportOptions kullanılacak koleksiyon türleri listesine ayarlayın ReferencedCollectionTypes (bundan sonra başvuruda bulunılan türler olarak bilinir). Herhangi bir koleksiyonu içeri aktarırken, başvurulan koleksiyon türlerinin listesi taranır ve en iyi eşleşen koleksiyon bulunursa kullanılır. İlişkilendirmeler yalnızca genel veya genel IDictionary olmayan arabirimi uygulayan türlerle eşleştirilirken, listeler desteklenen koleksiyon türleriyle eşleştirilir.

Örneğin, özelliği olarak BindingList<T>people ayarlanırsaReferencedCollectionTypes, önceki örnekteki tür aşağıdaki gibi oluşturulur.

[CollectionDataContract(ItemName = "person")]
public class people : BindingList<string> { }
<CollectionDataContract(ItemName:="person")> _
Public Class people
    Inherits BindingList(Of String)

Kapalı genel, en iyi eşleşme olarak kabul edilir. Örneğin, türler ve ArrayList başvurulan türler BindingList(Of Integer) koleksiyonuna geçirilirse, şemada bulunan tüm tamsayı listeleri olarak BindingList(Of Integer)içeri aktarılır. Diğer tüm listeler( örneğin, bir List(Of String)) olarak ArrayListiçeri aktarılır.

Genel IDictionary arabirimi uygulayan bir tür başvurulan türler koleksiyonuna eklenirse, tür parametreleri tamamen açık veya tamamen kapalı olmalıdır.

Yinelenen öğelere izin verilmez. Örneğin, başvurulan türlere hem a List(Of Integer) hem de a Collection(Of Integer) ekleyemezsiniz. Bu, şemada bir tamsayı listesi bulunduğunda hangilerinin kullanılacağını saptamayı imkansız hale getirir. Yinelemeler yalnızca şemada yinelenenler sorununu ortaya çıkaran bir tür varsa algılanır. Örneğin, içeri aktarılan şema tamsayı listeleri içermiyorsa, başvuruda bulunılan türler koleksiyonunda hem List(Of Integer) ve Collection(Of Integer) hem de değerlerinin bulunmasına izin verilir, ancak bunların hiçbiri herhangi bir etkisi olmaz.

Başvuruda bulunan koleksiyon türleri mekanizması, yalnızca ilkel koleksiyon koleksiyonları için değil, karmaşık tür koleksiyonları (diğer koleksiyon koleksiyonları dahil) için de aynı derecede iyi çalışır.

özelliği, ReferencedCollectionTypes SvcUtil.exe aracındaki /collectionType anahtarına karşılık gelir. Birden çok koleksiyon türüne başvurmak için /collectionType anahtarının birden çok kez belirtilmesi gerektiğini unutmayın. Tür MsCorLib.dll değilse, derlemesine /reference anahtarı kullanılarak da başvurulmalıdır.

İçeri Aktarma Seçenekleri: Varolan Türlere Başvurma

Bazen şemadaki türler mevcut .NET Framework türlerine karşılık gelir ve bu türleri sıfırdan oluşturmaya gerek yoktur. (Bu bölüm yalnızca toplama olmayan türler için geçerlidir. Koleksiyon türleri için önceki bölüme bakın.)

Örneğin, bir kişiyi temsil ederken her zaman kullanılmasını istediğiniz standart bir şirket genelinde "Kişi" veri sözleşmesi türünüz olabilir. Hizmet meta verilerinde bazı hizmetler bu türü kullandığında ve şeması göründüğünde, her hizmet için yeni bir şema oluşturmak yerine bu şemayı içeri aktarırken mevcut Person türü yeniden kullanmak isteyebilirsiniz.

Bunu yapmak için, özelliğin sınıfında döndürdüğü koleksiyona ReferencedTypes yeniden kullanmak istediğiniz .NET Framework türlerinin ImportOptions listesini geçirin. Bu türlerden herhangi birinin bir şema türünün adı ve ad alanıyla eşleşen bir veri sözleşmesi adı ve ad alanı varsa, yapısal bir karşılaştırma gerçekleştirilir. Türlerin hem eşleşen adlara hem de eşleşen yapılara sahip olduğu belirlenirse, yeni bir tane oluşturmak yerine mevcut .NET Framework türü yeniden kullanılır. Yalnızca ad eşleşiyorsa ancak yapı eşleşmiyorsa, bir özel durum oluşturulur. Türlere başvururken sürüm oluşturma için izin verilmediğini unutmayın (örneğin, yeni isteğe bağlı veri üyeleri ekleme). Yapılar tam olarak eşleşmelidir.

Bu ad ve ad alanıyla hiçbir şema türü içeri aktarılmadıkça başvuruda bulunan türler koleksiyonuna aynı veri sözleşmesi adına ve ad alanına sahip birden çok tür eklemek yasaldır. Bu, şemada gerçekten gerçekleşmeyen türlerin yinelemeleri konusunda endişelenmeden bir derlemedeki tüm türleri koleksiyona kolayca eklemenize olanak tanır.

özelliği, ReferencedTypes Svcutil.exe aracının belirli çalışma modlarında /reference anahtarına karşılık gelir.

Not

Hizmet Başvurusu Ekle araçlarının Svcutil.exe veya (Visual Studio'da) kullanıldığında, MsCorLib.dll içindeki tüm türlere otomatik olarak başvurulur.

İçeri Aktarma Seçenekleri: DataContract Olmayan Şemayı IXmlSerializable türleri olarak içeri aktarma

, XsdDataContractImporter şemanın sınırlı bir alt kümesini destekler. Desteklenmeyen şema yapıları varsa (örneğin, XML öznitelikleri), içeri aktarma girişimi bir özel durumla başarısız olur. Ancak, özelliğinin ImportXmlTypetrue ayarlanması desteklenen şema aralığını genişletir. olarak trueayarlandığında, XsdDataContractImporter arabirimini uygulayan IXmlSerializable türler oluşturur. Bu, bu türlerin XML gösterimine doğrudan erişim sağlar.

Tasarım Konusunda Dikkat Edilmesi Gerekenler
  • Zayıf türdeki XML gösterimiyle doğrudan çalışmak zor olabilir. Veri sözleşmeleriyle uyumlu olmayan şemayla güçlü bir şekilde çalışmak için gibi XmlSerializeralternatif bir serileştirme altyapısı kullanmayı göz önünde bulundurun. Daha fazla bilgi için bkz . XmlSerializer Sınıfını Kullanma.

  • Özelliği olarak ayarlandığında truebile ImportXmlType bazı şema yapıları tarafından XsdDataContractImporter içeri aktarılamaz. Yine, bu tür durumlar için kullanmayı XmlSerializer göz önünde bulundurun.

  • Veri Sözleşmesi Şema Başvurusu'nda hem olduğunda hem false de açıklandığında ImportXmlTypetrue desteklenen tam şema yapıları.

  • Oluşturulan IXmlSerializable türler için şema, içeri ve dışarı aktarıldığında uygunluğu korumaz. Yani, oluşturulan türlerden şemayı dışarı aktarmak ve sınıflar olarak içeri aktarmak özgün şemayı döndürmez.

Seçeneği daha önce açıklanan seçenekle ReferencedTypes birleştirmek ImportXmlType mümkündür. Uygulama olarak IXmlSerializable oluşturulması gereken türler için, özellik kullanılırken ReferencedTypes yapısal denetim atlanır.

seçeneği, ImportXmlType Svcutil.exe aracındaki /importXmlTypes anahtarına karşılık gelir.

Oluşturulan IXmlSerializable Türleriyle Çalışma

Oluşturulan IXmlSerializable türler, bir nesne dizisi XmlNode döndüren "nodeField" adlı özel bir alan içerir. Böyle bir türün örneğini seri durumdan çıkarırken, XML Belgesi Nesne Modeli'ni kullanarak XML verilerine doğrudan bu alan üzerinden erişebilirsiniz. Bu türdeki bir örneği seri hale getirdiğinizde, bu alanı istenen XML verilerine ayarlayabilirsiniz ve seri hale getirilir.

Bu, uygulama aracılığıyla IXmlSerializable gerçekleştirilir. Oluşturulan IXmlSerializable türünde, ReadXml uygulama sınıfının yöntemini XmlSerializableServices çağırırReadNodes. yöntemi, bir XmlReader aracılığıyla sağlanan XML'yi bir nesne dizisine dönüştüren bir yardımcı yöntemdir XmlNode . Uygulama WriteXml tam tersini yapar ve nesne dizisini XmlNode bir çağrı dizisine XmlWriter dönüştürür. Bu, yöntemi kullanılarak WriteNodes gerçekleştirilir.

Oluşturulan IXmlSerializable sınıflarda şema dışarı aktarma işlemini çalıştırmak mümkündür. Daha önce belirtildiği gibi, özgün şemayı geri almayacaksınız. Bunun yerine, herhangi bir XSD türü için joker karakter olan "anyType" standart XSD türünü alırsınız.

Bu, özniteliği oluşturulan XmlSchemaProviderAttributeIXmlSerializable sınıflara uygulanarak ve "anyType" türünü oluşturmak için yöntemini çağıran AddDefaultSchema bir yöntem belirtilerek gerçekleştirilir.

Not

Türü XmlSerializableServices yalnızca bu özelliği desteklemek için mevcuttur. Başka bir amaçla kullanılması önerilmez.

İçeri Aktarma Seçenekleri: Gelişmiş Seçenekler

Gelişmiş içeri aktarma seçenekleri şunlardır:

Ayrıca bkz.