Aracılığıyla paylaş


Veri Sözleşmesi Şema Başvurusu

Bu konu, XML serileştirme için ortak dil çalışma zamanı (CLR) türlerini açıklamak için tarafından DataContractSerializer kullanılan XML Şemasının (XSD) alt kümesini açıklar.

DataContractSerializer Eşlemeleri

Meta DataContractSerializer veriler bir meta veri uç noktası veya ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe) kullanılarak bir Windows Communication Foundation (WCF) hizmetinden dışarı aktarıldığında CLR türlerini XSD ile eşler. Daha fazla bilgi için bkz . Veri Sözleşmesi Seri Hale Getiricisi.

Ayrıca, DataContractSerializer Web Hizmetleri Açıklama Dili (WSDL) veya XSD belgelerine erişmek ve hizmetler veya istemciler için veri sözleşmeleri oluşturmak için Svcutil.exe kullanıldığında XSD'yi CLR türleriyle eşler.

Yalnızca bu belgede belirtilen gereksinimlere uyan XML Şeması örnekleri kullanılarak DataContractSerializerCLR türlerine eşlenebilir.

Destek Düzeyleri

, DataContractSerializer belirli bir XML Şeması özelliği için aşağıdaki destek düzeylerini sağlar:

  • Desteklenir. Bu özellikten kullanılarak DataContractSerializerCLR türlerine veya özniteliklerine (veya her ikisine) yönelik açık eşleme vardır.

  • Yoksayıldı. özelliği, tarafından DataContractSerializeriçeri aktarılan şemalarda izin verilir, ancak kod oluşturma üzerinde hiçbir etkisi yoktur.

  • Yasak. DataContractSerializer özelliği kullanılarak bir şemanın içeri aktarılmasını desteklemez. Örneğin, Svcutil.exe, böyle bir özelliği kullanan bir şemayla WSDL'ye erişirken, bunun yerine kullanmaya XmlSerializer geri döner. Varsayılan olarak budur.

Genel Bilgiler

  • Şema ad alanı XML Şeması'nda açıklanmıştır. Bu belgede "xs" ön eki kullanılır.

  • Şema dışı ad alanına sahip tüm öznitelikler yoksayılır.

  • Tüm ek açıklamalar (bu belgede açıklananlar dışında) yoksayılır.

<xs:schema>: öznitelikler

Öznitelik DataContract
attributeFormDefault Göz ardı.
blockDefault Göz ardı.
elementFormDefault Uygun olmalıdır. Bir şemanın tarafından DataContractSerializerdesteklenmesi için tüm öğelerin nitelenmesi gerekir. Bu, xs:schema/@elementFormDefault 'ni "nitelenmiş" olarak ayarlayarak veya xs:element/@form her öğe bildiriminde "nitelenmiş" olarak ayarlanarak gerçekleştirilebilir.
finalDefault Göz ardı.
Id Göz ardı.
targetNamespace Desteklenir ve veri sözleşmesi ad alanına eşlenir. Bu öznitelik belirtilmezse, boş ad alanı kullanılır. Ayrılmış ad alanı http://schemas.microsoft.com/2003/10/Serialization/olamaz.
version Göz ardı.

<xs:schema>: contents

İçindekiler Şema
include Destekleniyor. DataContractSerializer xs:include ve xs:import'ı destekler. Ancak, Svcutil.exe yerel bir dosyadan meta veriler yüklendiğinde aşağıdakileri xs:include/@schemaLocation ve xs:import/@location başvuruları kısıtlar. Şema dosyalarının listesi, bu durumda değil bant dışı bir mekanizmadan include geçirilmelidir; included şema belgeleri yoksayılır.
redefine Yasak. kullanımı xs:redefine , güvenlik nedeniyle tarafından DataContractSerializer yasaklanmıştır: x:redefine takip edilmesi gerekir schemaLocation . Bazı durumlarda DataContract Svcutil.exe kullanımını schemaLocationkısıtlar.
import Destekleniyor. DataContractSerializerve 'i xs:importdesteklerxs:include. Ancak, Svcutil.exe yerel bir dosyadan meta veriler yüklendiğinde aşağıdakileri xs:include/@schemaLocation ve xs:import/@location başvuruları kısıtlar. Şema dosyalarının listesi, bu durumda değil bant dışı bir mekanizmadan include geçirilmelidir; included şema belgeleri yoksayılır.
simpleType Destekleniyor. xs:simpleType Bölümüne bakın.
complexType Desteklenir, veri sözleşmelerine eşler. xs:complexType Bölümüne bakın.
group Göz ardı. DataContractSerializer, xs:attributeGroupve xs:attributekullanımını xs:groupdesteklemez. Bu bildirimler alt öğeleri xs:schemaolarak yoksayılır, ancak veya diğer desteklenen yapıların içinden complexType başvurulamaz.
attributeGroup Göz ardı. DataContractSerializer, xs:attributeGroupve xs:attributekullanımını xs:groupdesteklemez. Bu bildirimler alt öğeleri xs:schemaolarak yoksayılır, ancak veya diğer desteklenen yapıların içinden complexType başvurulamaz.
element Destekleniyor. Bkz. Genel Öğe Bildirimi (GED).
attribute Göz ardı. DataContractSerializer, xs:attributeGroupve xs:attributekullanımını xs:groupdesteklemez. Bu bildirimler alt öğeleri xs:schemaolarak yoksayılır, ancak veya diğer desteklenen yapıların içinden complexType başvurulamaz.
notation Göz ardı.

Karmaşık Türler – <xs:complexType>

Genel Bilgiler

Her karmaşık xs:complexType> türü <bir veri sözleşmesiyle eşler.

<xs:complexType>: öznitelikler

Öznitelik Şema
abstract False (varsayılan) olmalıdır.
block Yasak.
final Göz ardı.
id Göz ardı.
mixed False (varsayılan) olmalıdır.
name Desteklenir ve veri sözleşmesi adıyla eşlenir. Adında nokta varsa, türü bir iç türe eşleme girişiminde bulunuldu. Örneğin, adlı A.B karmaşık bir tür, yalnızca böyle bir veri sözleşmesi türü varsa, veri sözleşmesi adına Asahip bir türün iç türü olan bir veri sözleşmesi türüyle eşler. Birden fazla iç içe yerleştirme düzeyi mümkündür: örneğin, A.B.C iç tür olabilir, ancak yalnızca ve A.B her ikisi de varsaA.

<xs:complexType>: contents

İçindekiler Şema
simpleContent Uzantılar yasaktır.

Kısıtlamaya yalnızca içinden anySimpleTypeizin verilir.
complexContent Destekleniyor. Bkz. "Devralma".
group Yasak.
all Yasak.
choice Yasak
sequence Desteklenir, veri sözleşmesinin veri üyeleriyle eşler.
attribute Yasak, use="yasak" olsa bile (bir istisna dışında). Yalnızca Standart Serileştirme Şeması ad alanından isteğe bağlı öznitelikler desteklenir. Veri sözleşmesi programlama modelindeki veri üyeleriyle eşlenmez. Şu anda bu tür özniteliklerden yalnızca birinin anlamı vardır ve ISerializable bölümünde ele alınmıştır. Diğer tüm öğeler yoksayılır.
attributeGroup Yasak. WCF v1 sürümünde, DataContractSerializer içinde xs:complexTypevarlığını attributeGroup yoksayar.
anyAttribute Yasak.
(boş) Veri üyesi olmayan bir veri sözleşmesiyle eşler.

<karmaşık türde xs:sequence> : öznitelikler

Öznitelik Şema
id Göz ardı.
maxOccurs 1 (varsayılan) olmalıdır.
minOccurs 1 (varsayılan) olmalıdır.

<karmaşık türde xs:sequence> : contents

İçindekiler Şema
element Her örnek bir veri üyesiyle eşler.
group Yasak.
choice Yasak.
sequence Yasak.
any Yasak.
(boş) Veri üyesi olmayan bir veri sözleşmesiyle eşler.

Elements – <xs:element>

Genel Bilgiler

<xs:element> aşağıdaki bağlamlarda oluşabilir:

  • Normal (toplama olmayan) bir <xs:sequence>veri sözleşmesinin veri üyesini tanımlayan içinde oluşabilir. Bu durumda özniteliği maxOccurs 1 olmalıdır. (0 değerine izin verilmez).

  • Bu, bir <xs:sequence>koleksiyon veri sözleşmesinin veri üyesini tanımlayan içinde oluşabilir. Bu durumda, maxOccurs özniteliği 1'den büyük veya "ilişkisiz" olmalıdır.

  • Bir Genel Öğe Bildirimi (GED) içinde <xs:schema> gerçekleşebilir.

<xs:sequence> içinde <maxOccurs=1 ile xs:öğesi> (Veri Üyeleri)

Öznitelik Şema
ref Yasak.
name Desteklenir, veri üyesi adıyla eşler.
type Desteklenir, veri üyesi türüne eşler. Daha fazla bilgi için bkz. Tür/temel eşleme. Belirtilmezse (ve öğesi anonim bir tür içermiyorsa) xs:anyType varsayılır.
block Göz ardı.
default Yasak.
fixed Yasak.
form Uygun olmalıdır. Bu öznitelik üzerinde xs:schemaaracılığıyla elementFormDefault ayarlanabilir.
id Göz ardı.
maxOccurs 1
minOccurs Veri üyesinin IsRequired özelliğiyle eşler (IsRequired 1 olduğunda minOccurs doğrudur).
nillable Tür eşlemesini etkiler. Bkz. Tür/ilkel eşleme.

<xs:sequence> içinde <maxOccurs>1 içeren xs:öğesi> (Koleksiyonlar)

Koleksiyonlar aşağıdaki türlerden olabilir:

  • Normal koleksiyonlar (örneğin, diziler).

  • Sözlük koleksiyonları (bir değeri başka bir değerle eşleme; örneğin, bir Hashtable).

  • Sözlük ile anahtar/değer çifti türündeki bir dizi arasındaki tek fark, oluşturulan programlama modelindedir. Belirli bir türün sözlük koleksiyonu olduğunu belirtmek için kullanılabilecek bir şema ek açıklaması mekanizması vardır.

, , block, default, fixed, formve id özniteliklerinin kurallarıref, koleksiyon dışı durumla aynıdır. Diğer öznitelikler aşağıdaki tabloda yer alan öznitelikleri içerir.

Öznitelik Şema
name Desteklenir, özniteliğindeki ItemName özelliğiyle eşler CollectionDataContractAttribute .
type Desteklenir, koleksiyonda depolanan türle eşler.
maxOccurs 1'den büyük veya "ilişkisiz". DC şeması "ilişkisiz" kullanmalıdır.
minOccurs Göz ardı.
nillable Tür eşlemesini etkiler. Bu öznitelik sözlük koleksiyonları için yoksayılır.

<xs:schema> Genel Öğe Bildirimi içindeki <xs:öğesi>

  • Şemadaki bir türle aynı ada ve ad alanına sahip veya kendi içinde anonim bir tür tanımlayan genel öğe bildiriminin (GED) türüyle ilişkilendirileceği söylenir.

  • Şema dışarı aktarma: oluşturulan her tür için hem basit hem de karmaşık ilişkili GED'ler oluşturulur.

  • Seri durumdan çıkarma/serileştirme: türü için kök öğeler olarak ilişkili GED'ler kullanılır.

  • Şema içeri aktarma: ilişkili GED'ler gerekli değildir ve aşağıdaki kurallara uyarlarsa (türleri tanımlamadıkları sürece) yoksayılır.

Öznitelik Şema
abstract İlişkili GED'ler için false olmalıdır.
block İlişkili GED'lerde yasaktır.
default İlişkili GED'lerde yasaktır.
final İlişkili GED'ler için false olmalıdır.
fixed İlişkili GED'lerde yasaktır.
id Göz ardı.
name Destekleniyor. İlişkili GED'lerin tanımına bakın.
nillable İlişkili GED'ler için doğru olmalıdır.
substitutionGroup İlişkili GED'lerde yasaktır.
type Desteklenir ve ilişkili GED'ler için ilişkili türle eşleşmelidir (öğe anonim bir tür içermiyorsa).

<xs:element>: contents

İçindekiler Şema
simpleType Destekli.*
complexType Destekli.*
unique Göz ardı.
key Göz ardı.
keyref Göz ardı.
(boş) Destekleniyor.

* ve complexTypekullanırkensimpleType, anonim türler için eşleme anonim olmayan türlerle aynıdır, ancak anonim veri sözleşmeleri yoktur ve dolayısıyla öğe adından türetilmiş bir adla adlandırılmış bir veri sözleşmesi oluşturulur. Anonim türlerin kuralları aşağıdaki listededir:

  • WCF uygulama ayrıntısı xs:element : Ad nokta içermiyorsa, anonim tür dış veri sözleşmesi türünün iç türüyle eşler. Ad nokta içeriyorsa, sonuçta elde edilen veri sözleşmesi türü bağımsızdır (iç tür değildir).

  • İç türün oluşturulan veri sözleşmesi adı, dış türün veri sözleşmesi adı ve ardından nokta, öğenin adı ve "Tür" dizesidir.

  • Böyle bir ada sahip bir veri sözleşmesi zaten varsa, benzersiz bir ad oluşturulana kadar "1", "2", "3" vb. eklenerek ad benzersiz hale getirilir.

Basit Türler - <xs:simpleType>

<xs:simpleType>: öznitelikler

Öznitelik Şema
final Göz ardı.
id Göz ardı.
name Desteklenir, veri sözleşmesi adıyla eşler.

<xs:simpleType>: contents

İçindekiler Şema
restriction Destekleniyor. Numaralandırma veri sözleşmelerine eşler. Bu öznitelik, numaralandırma düzeniyle eşleşmiyorsa yoksayılır. xs:simpleType Kısıtlamalar bölümüne bakın.
list Destekleniyor. Numaralandırma veri sözleşmelerine bayrak eklemek için eşlenir. xs:simpleType Listeler bölümüne bakın.
union Yasak.

<xs:restriction>

  • Karmaşık tür kısıtlamaları yalnızca base=""xs:anyType için desteklenir.

  • Bunun basit tür kısıtlamaları, xs:string numaralandırma veri sözleşmeleriyle eşlenmiş dışında xs:enumeration herhangi bir kısıtlama modeline sahip değildir.

  • Diğer tüm basit tür kısıtlamaları, kısıtladıkları türlerle eşlenir. Örneğin, aynı kendisi gibi xs:int bir tamsayıyla eşlenin xs:int kısıtlaması. Temel tür eşlemesi hakkında daha fazla bilgi için bkz. Tür/temel eşleme.

<xs:restriction>: öznitelikler

Öznitelik Şema
base Desteklenen basit bir tür veya xs:anyTypeolmalıdır.
id Göz ardı.

<xs:diğer tüm durumlar için kısıtlama> : içerik

İçindekiler Şema
simpleType Varsa, desteklenen bir ilkel türden türetilmelidir.
minExclusive Göz ardı.
minInclusive Göz ardı.
maxExclusive Göz ardı.
maxInclusive Göz ardı.
totalDigits Göz ardı.
fractionDigits Göz ardı.
length Göz ardı.
minLength Göz ardı.
maxLength Göz ardı.
enumeration Göz ardı.
whiteSpace Göz ardı.
pattern Göz ardı.
(boş) Destekleniyor.

Listeleme

<xs:numaralandırmalar için kısıtlama> : öznitelikler

Öznitelik Şema
base Varsa, olmalıdır xs:string.
id Göz ardı.

<sabit listeleri için xs:restriction> : contents

İçindekiler Şema
simpleType Varsa, veri sözleşmesi (bu bölüm) tarafından desteklenen bir numaralandırma kısıtlaması olmalıdır.
minExclusive Göz ardı.
minInclusive Göz ardı.
maxExclusive Göz ardı.
maxInclusive Göz ardı.
totalDigits Göz ardı.
fractionDigits Göz ardı.
length Yasak.
minLength Yasak.
maxLength Yasak.
enumeration Destekleniyor. Numaralandırma "kimliği" yoksayılır ve "değer", numaralandırma veri sözleşmesindeki değer adıyla eşler.
whiteSpace Yasak.
pattern Yasak.
(boş) Desteklenir, boş numaralandırma türüne eşler.

Aşağıdaki kod bir C# numaralandırma sınıfını gösterir.

public enum MyEnum
{
  first = 3,
  second = 4,
  third =5
}

Bu sınıf tarafından aşağıdaki şemaya eşler DataContractSerializer. Numaralandırma değerleri 1'den başlıyorsa bloklar xs:annotation oluşturulmaz.

<xs:simpleType name="MyEnum">
  <xs:restriction base="xs:string">
    <xs:enumeration value="first">
      <xs:annotation>
        <xs:appinfo>
          <EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
          3
          </EnumerationValue>
        </xs:appinfo>
      </xs:annotation>
    </xs:enumeration>
    <xs:enumeration value="second">
      <xs:annotation>
        <xs:appinfo>
          <EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
          4
          </EnumerationValue>
        </xs:appinfo>
      </xs:annotation>
    </xs:enumeration>
  </xs:restriction>
</xs:simpleType>

<xs:list>

DataContractSerializerile System.FlagsAttribute işaretlenen numaralandırma türlerini' den xs:stringtüretilmiş olarak xs:list eşler. Başka xs:list hiçbir varyasyon desteklenmez.

<xs:list>: öznitelikler

Öznitelik Şema
itemType Yasak.
id Göz ardı.

<xs:list>: contents

İçindekiler Şema
simpleType Model kullanımı xs:enumeration kısıtlaması xs:string olmalıdır.

Numaralandırma değeri 2 ilerlemenin (Bayraklar için varsayılan) gücünü izlemiyorsa, değer öğesinde xs:annotation/xs:appInfo/ser:EnumerationValue depolanır.

Örneğin, aşağıdaki kod bir numaralandırma türüne bayrak ekler.

[Flags]
public enum AuthFlags
{
  AuthAnonymous = 1,
  AuthBasic = 2,
  AuthNTLM = 4,
  AuthMD5 = 16,
  AuthWindowsLiveID = 64,
}

Bu tür aşağıdaki şemaya eşler.

<xs:simpleType name="AuthFlags">
    <xs:list>
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="AuthAnonymous" />
          <xs:enumeration value="AuthBasic" />
          <xs:enumeration value="AuthNTLM" />
          <xs:enumeration value="AuthMD5">
            <xs:annotation>
              <xs:appinfo>
                <EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">16</EnumerationValue>
              </xs:appinfo>
            </xs:annotation>
          </xs:enumeration>
          <xs:enumeration value="AuthWindowsLiveID">
            <xs:annotation>
              <xs:appinfo>
                <EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">64</EnumerationValue>
              </xs:appinfo>
            </xs:annotation>
          </xs:enumeration>
        </xs:restriction>
      </xs:simpleType>
    </xs:list>
  </xs:simpleType>

Devralma

Genel kurallar

Veri sözleşmesi başka bir veri sözleşmesinden devralabilir. Bu tür veri anlaşmaları bir tabanla eşlenir ve XML Şema yapısı kullanılarak <xs:extension> uzantı türleri tarafından türetilir.

Veri sözleşmesi koleksiyon veri sözleşmesinden devralamaz.

Örneğin, aşağıdaki kod bir veri sözleşmesidir.

[DataContract]
public class Person
{
  [DataMember]
  public string Name;
}
[DataContract]
public class Employee : Person
{
  [DataMember]
  public int ID;
}

Bu veri sözleşmesi aşağıdaki XML Şema türü bildirimiyle eşler.

<xs:complexType name="Employee">
 <xs:complexContent mixed="false">
  <xs:extension base="tns:Person">
   <xs:sequence>
    <xs:element minOccurs="0" name="ID" type="xs:int"/>
   </xs:sequence>
  </xs:extension>
 </xs:complexContent>
</xs:complexType>
<xs:complexType name="Person">
 <xs:sequence>
  <xs:element minOccurs="0" name="Name"
    nillable="true" type="xs:string"/>
 </xs:sequence>
</xs:complexType>

<xs:complexContent>: öznitelikler

Öznitelik Şema
id Göz ardı.
mixed Yanlış olmalıdır.

<xs:complexContent>: contents

İçindekiler Şema
restriction Yasak, ancak base=""xs:anyType. İkincisi, içeriğini doğrudan kapsayıcısının xs:restriction altına yerleştirmekle xs:complexContenteşdeğerdir.
extension Destekleniyor. Veri sözleşmesi devralma ile eşler.

<xs:complexContent>: özniteliklerinde <xs:extension>

Öznitelik Şema
id Göz ardı.
base Destekleniyor. Bu türün devraldığı temel veri sözleşmesi türüne eşler.

<xs:complexContent>: içindekiler içinde <xs:extension>

Kurallar, içindekiler ile <xs:complexType> aynıdır.

<xs:sequence> sağlanırsa, üye öğeleri türetilmiş veri sözleşmesinde bulunan ek veri üyeleriyle eşlenir.

Türetilmiş bir tür, temel türdeki bir öğeyle aynı ada sahip bir öğe içeriyorsa, yinelenen öğe bildirimi benzersiz olacak şekilde oluşturulan bir ada sahip bir veri üyesiyle eşler. Benzersiz bir ad bulunana kadar veri üyesi adına ("üye1", "üye2" vb.) pozitif tamsayı numaraları eklenir. Tersine:

  • Türetilmiş bir veri sözleşmesinin, temel veri sözleşmesindeki bir veri üyesiyle aynı ada ve türe sahip bir veri üyesi varsa, DataContractSerializer türetilmiş türde bu ilgili öğeyi oluşturur.

  • Türetilmiş bir veri sözleşmesinin, temel veri sözleşmesindeki bir veri üyesiyle aynı ada ancak farklı bir türe sahip bir veri üyesi varsa, DataContractSerializer hem temel tür hem de türetilmiş tür bildirimlerinde türünde xs:anyType bir öğeye sahip bir şema içeri aktarır. Özgün tür adı içinde xs:annotations/xs:appInfo/ser:ActualType/@Namekorunur.

Her iki varyasyon da ilgili veri üyelerinin sırasına bağlı olarak belirsiz con çadır modu l içeren bir şemaya yol açabilir.

Tür/ilkel eşleme

XML DataContractSerializer Şeması ilkel türleri için aşağıdaki eşlemeyi kullanır.

XSD türü .NET türü
anyType Object.
anySimpleType String.
duration TimeSpan.
dateTime DateTime.
dateTimeOffset DateTime ve TimeSpan uzaklık için. Aşağıdaki DateTimeOffset Serileştirme bölümüne bakın.
time String.
date String.
gYearMonth String.
gYear String.
gMonthDay String.
gDay String.
gMonth String.
boolean Boolean
base64Binary Byte dizi.
hexBinary String.
float Single.
double Double.
anyURI Uri.
QName XmlQualifiedName.
string String.
normalizedString String.
token String.
language String.
Name String.
NCName String.
ID String.
IDREF String.
IDREFS String.
ENTITY String.
ENTITIES String.
NMTOKEN String.
NMTOKENS String.
decimal Decimal.
integer Int64.
nonPositiveInteger Int64.
negativeInteger Int64.
long Int64.
int Int32.
short Int16.
Byte SByte.
nonNegativeInteger Int64.
unsignedLong UInt64.
unsignedInt UInt32.
unsignedShort UInt16.
unsignedByte Byte.
positiveInteger Int64.

ISerializable türleri eşlemesi

.NET Framework sürüm 1.0'da, ISerializable kalıcılık veya veri aktarımı için nesneleri seri hale getirmek için genel bir mekanizma olarak sunulmuştur. Uygulayan ISerializable ve uygulamalar arasında geçirilebilen birçok .NET Framework türü vardır. DataContractSerializer doğal olarak sınıflar için ISerializable destek sağlar. Uygulama DataContractSerializer şeması türlerini yalnızca türün QName (tam adı) ile farklılık gösteren ve etkin bir şekilde özellik koleksiyonları olan eşler ISerializable . Örneğin, DataContractSerializer ad alanında aşağıdaki XSD türüne eşler Exception http://schemas.datacontract.org/2004/07/System .

<xs:complexType name="Exception">
 <xs:sequence>
  <xs:any minOccurs="0" maxOccurs="unbounded"
      namespace="##local" processContents="skip"/>
 </xs:sequence>
 <xs:attribute ref="ser:FactoryType"/>
</xs:complexType>

Veri Sözleşmesi Serileştirme şemasında bildirilen isteğe bağlı öznitelik ser:FactoryType , türü seri durumdan çıkarabilen bir fabrika sınıfına başvurur. Fabrika sınıfı, kullanılan örneğin bilinen türler koleksiyonunun DataContractSerializer bir parçası olmalıdır. Bilinen türler hakkında daha fazla bilgi için bkz . Veri Sözleşmesi Bilinen Türleri.

DataContract Serileştirme Şeması

Özel bir Veri Sözleşmesi Serileştirme ad alanından kullanım türleri, öğeleri ve öznitelikleri tarafından DataContractSerializer dışarı aktarılan bir dizi şema:

http://schemas.microsoft.com/2003/10/Serialization

Aşağıda eksiksiz bir Veri Sözleşmesi Serileştirme şema bildirimi yer alır.

<xs:schema attributeFormDefault="qualified"
   elementFormDefault="qualified"
   targetNamespace =
    "http://schemas.microsoft.com/2003/10/Serialization/"
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/">

 <!-- Top-level elements for primitive types. -->
 <xs:element name="anyType" nillable="true" type="xs:anyType"/>
 <xs:element name="anyURI" nillable="true" type="xs:anyURI"/>
 <xs:element name="base64Binary"
       nillable="true" type="xs:base64Binary"/>
 <xs:element name="boolean" nillable="true" type="xs:boolean"/>
 <xs:element name="byte" nillable="true" type="xs:byte"/>
 <xs:element name="dateTime" nillable="true" type="xs:dateTime"/>
 <xs:element name="decimal" nillable="true" type="xs:decimal"/>
 <xs:element name="double" nillable="true" type="xs:double"/>
 <xs:element name="float" nillable="true" type="xs:float"/>
 <xs:element name="int" nillable="true" type="xs:int"/>
 <xs:element name="long" nillable="true" type="xs:long"/>
 <xs:element name="QName" nillable="true" type="xs:QName"/>
 <xs:element name="short" nillable="true" type="xs:short"/>
 <xs:element name="string" nillable="true" type="xs:string"/>
 <xs:element name="unsignedByte"
       nillable="true" type="xs:unsignedByte"/>
 <xs:element name="unsignedInt"
       nillable="true" type="xs:unsignedInt"/>
 <xs:element name="unsignedLong"
       nillable="true" type="xs:unsignedLong"/>
 <xs:element name="unsignedShort"
       nillable="true" type="xs:unsignedShort"/>

 <!-- Primitive types introduced for certain .NET simple types. -->
 <xs:element name="char" nillable="true" type="tns:char"/>
 <xs:simpleType name="char">
  <xs:restriction base="xs:int"/>
 </xs:simpleType>

 <!-- xs:duration is restricted to an ordered value space,
    to map to System.TimeSpan -->
 <xs:element name="duration" nillable="true" type="tns:duration"/>
 <xs:simpleType name="duration">
  <xs:restriction base="xs:duration">
   <xs:pattern
     value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?"/>
   <xs:minInclusive value="-P10675199DT2H48M5.4775808S"/>
   <xs:maxInclusive value="P10675199DT2H48M5.4775807S"/>
  </xs:restriction>
 </xs:simpleType>

 <xs:element name="guid" nillable="true" type="tns:guid"/>
 <xs:simpleType name="guid">
  <xs:restriction base="xs:string">
   <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}"/>
  </xs:restriction>
 </xs:simpleType>

 <!-- This is used for schemas exported from ISerializable type. -->
 <xs:attribute name="FactoryType" type="xs:QName"/>
</xs:schema>

Aşağıdakilere dikkat edilmelidir:

  • ser:char türünde CharUnicode karakterlerini temsil etmek için kullanıma sunulmuştur.

  • valuespace, xs:duration bir ile eşlenebilmesi için sıralı bir TimeSpankümeye küçültülür.

  • FactoryType , türetilen ISerializabletürlerden dışarı aktarılan şemalarda kullanılır.

DataContract olmayan şemaları içeri aktarma

DataContractSerializerImportXmlTypes, XSD profiline uymayan şemaların içeri aktarılmasına DataContractSerializer izin verme seçeneğine sahiptir (özelliğine Options bakın). Bu seçeneğin true ayarlanması, uyumlu olmayan şema türlerinin kabul edilmesini ve bunların aşağıdaki uygulamayla eşlenmesine olanak tanır ve IXmlSerializable bir dizisini XmlNode sarmalar (yalnızca sınıf adı farklıdır).

[GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")]
[System.Xml.Serialization.XmlRootAttribute(IsNullable=false)]
public partial class Person : object, IXmlSerializable
{
  private XmlNode[] nodesField;
  private static XmlQualifiedName typeName =
new XmlQualifiedName("Person","http://Microsoft.ServiceModel.Samples");
  public XmlNode[] Nodes
  {
    get {return this.nodesField;}
    set {this.nodesField = value;}
  }
  public void ReadXml(XmlReader reader)
  {
    this.nodesField = XmlSerializableServices.ReadNodes(reader);
  }
  public void WriteXml(XmlWriter writer)
  {
    XmlSerializableServices.WriteNodes(writer, this.Nodes);
  }
  public System.Xml.Schema.XmlSchema GetSchema()
  {
    return null;
  }
  public static XmlQualifiedName ExportSchema(XmlSchemaSet schemas)
  {
    XmlSerializableServices.AddDefaultSchema(schemas, typeName);
    return typeName;
  }
}

DateTimeOffset Serileştirme

DateTimeOffset, ilkel bir tür olarak değerlendirilmez. Bunun yerine, iki parçalı karmaşık bir öğe olarak serileştirilir. İlk bölüm tarih saatini, ikinci bölüm ise tarih saatinden uzaklığı temsil eder. Aşağıdaki kodda seri hale getirilmiş bir DateTimeOffset değeri örneği gösterilmiştir.

<OffSet xmlns:a="http://schemas.datacontract.org/2004/07/System">
  <DateTime i:type="b:dateTime" xmlns=""
    xmlns:b="http://www.w3.org/2001/XMLSchema">2008-08-28T08:00:00
  </DateTime>
  <OffsetMinutes i:type="b:short" xmlns=""
   xmlns:b="http://www.w3.org/2001/XMLSchema">-480
   </OffsetMinutes>
</OffSet>

Şema aşağıdaki gibidir.

<xs:schema targetNamespace="http://schemas.datacontract.org/2004/07/System">
   <xs:complexType name="DateTimeOffset">
      <xs:sequence minOccurs="1" maxOccurs="1">
         <xs:element name="DateTime" type="xs:dateTime"
         minOccurs="1" maxOccurs="1" />
         <xs:element name="OffsetMinutes" type="xs:short"
         minOccurs="1" maxOccurs="1" />
      </xs:sequence>
   </xs:complexType>
</xs:schema>

Ayrıca bkz.