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

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ğine tarafından içeri aktarılan DataContractSerializerşemalarda izin verilir, ancak kod oluşturma üzerinde hiçbir etkisi yoktur.

  • Yasak. özelliği DataContractSerializer 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 ad alanı olmayan ö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 Nitelenmiş olmalıdır. Bir şemanın tarafından DataContractSerializerdesteklenmesi için tüm öğelerin nitelenmesi gerekir. Bu, xs:schema/@elementFormDefault "qualified" olarak ayarlanarak veya her bir öğe bildiriminde xs:element/@form "qualified" 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, meta veriler yerel bir dosyadan 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; include d şema belgeleri yoksayılır.
redefine Yasak. kullanımı xs:redefine , güvenlik nedeniyle yasaktır DataContractSerializer : 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, meta veriler yerel bir dosyadan 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; include d şema belgeleri yoksayılır.
simpleType Destekleniyor. xs:simpleType Bölümüne bakın.
complexType Desteklenir, veri anlaşmalarına 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 öğesinin xs:schemaalt öğeleri olarak yoksayılır, ancak içinden complexType veya desteklenen diğer yapılardan başvurulamaz.
attributeGroup Göz ardı. DataContractSerializer, xs:attributeGroupve xs:attributekullanımını xs:groupdesteklemez. Bu bildirimler öğesinin xs:schemaalt öğeleri olarak yoksayılır, ancak içinden complexType veya desteklenen diğer yapılardan başvurulamaz.
element Destekleniyor. Bkz. Genel Öğe Bildirimi (GED).
attribute Göz ardı. DataContractSerializer, xs:attributeGroupve xs:attributekullanımını xs:groupdesteklemez. Bu bildirimler öğesinin xs:schemaalt öğeleri olarak yoksayılır, ancak içinden complexType veya desteklenen diğer yapılardan 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, veri sözleşmesi adıyla Abir türün iç türü olan bir veri sözleşmesi türüyle eşler, ancak yalnızca böyle bir veri sözleşmesi türü varsa. 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, bir veri sözleşmesinin veri üyeleriyle eşler.
attribute Yasak, use="yasak" (tek bir özel durum hariç) olsa bile. 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ğerleri 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 açıklayan içinde gerçekleşebilir. Bu durumda özniteliği maxOccurs 1 olmalıdır. (0 değerine izin verilmez).

  • Bu, bir <xs:sequence>toplama veri sözleşmesinin veri üyesini açıklayan içinde gerçekleşebilir. 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> oluşabilir.

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

Öznitelik Şema
ref Yasak.
name Desteklenir, veri üyesi adıyla eşler.
type Desteklenir, veri üyesi türüyle 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 Nitelenmiş 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ü dizisi 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çıklama mekanizması vardır.

, , block, default, fixedform, ve id özniteliklerinin kurallarıref, koleksiyon olmayan büyük/küçük harfle aynıdır. Diğer öznitelikler aşağıdaki tabloda yer alan öznitelikleri içerir.

Öznitelik Şema
name Desteklenir, özniteliğindeki ItemName özelliğiyle CollectionDataContractAttribute eşler.
type Desteklenir, koleksiyonda depolanan türle eşler.
maxOccurs 1'den büyük veya "ilişkisiz". DC şeması "sınırsız" 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:element>

  • Ş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ürle 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: ilişkili GED'ler tür için kök öğeler olarak 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 Desteklenen.*
complexType Desteklenen.*
unique Göz ardı.
key Göz ardı.
keyref Göz ardı.
(boş) Destekleniyor.

* Anonim türler için ve complexType, eşlemesi simpleType kullanıldığında, anonim olmayan türlerle aynıdır, ancak anonim veri anlaşmaları yoktur ve bu nedenle öğe adından türetilmiş bir adla adlandırılmış veri sözleşmesi oluşturulur. Anonim türlerin kuralları aşağıdaki listede yer almaktadır:

  • 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üne eşler. Ad dönemler 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. Numaralandırma deseni ile eşleşmiyorsa bu öznitelik 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ı, numaralandırma veri sözleşmeleriyle xs:string eşlenme dışında xs:enumeration herhangi bir kısıtlama özelliğine sahip değildir.

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

<xs:restriction>: öznitelikler

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

<xs:restriction> for all other cases: contents

İç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.

Sabit Listesi

<sabit listeleri için xs:restriction> : ö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 "id" 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 işaretlenen numaralandırma türlerini' den xs:stringtüretilmiş olarak System.FlagsAttributexs:list eşler. Başka xs:list çeşitlemeler 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 False olmalıdır.

<xs:complexContent>: contents

İçindekiler Şema
restriction Yasak, base=""xs:anyType dışında. İ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 veri üyesiyle aynı ada ve türe sahip bir veri üyesi varsa, DataContractSerializer türetilen türde bu ilgili öğeyi oluşturur.

  • Türetilmiş bir veri sözleşmesinin temel veri sözleşmesindeki veri üyesiyle aynı ada ancak farklı bir türe sahip bir veri üyesi varsa, DataContractSerializer hem temel türdeki hem de türetilmiş tür bildirimlerinde türünde xs:anyType bir öğeye sahip bir şemayı 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 bir içerik modeline sahip bir şemaya yol açabilir.

Tür/ilkel eşleme

, DataContractSerializer XML Şeması temel 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 tanıtıldı. 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. Yalnızca DataContractSerializer türün QName (tam adı) ile farklılık gösteren uygulama şema türlerini eşler ISerializable ve etkili bir şekilde özellik koleksiyonlarıdır. Örneğin, DataContractSerializer ad alanında aşağıdaki XSD türüyle eşler Exceptionhttp://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ür 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 karakterleri temsil etmek için kullanıma sunulmuştur.

  • , valuespacexs: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ğitrue, uyumlu olmayan şema türlerinin kabul edilmesini ve bir dizisini XmlNode sarmalayarak (yalnızca sınıf adı farklıdır) aşağıdaki uygulamayla IXmlSerializable eşlenmesine olanak tanı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 kabul edilmez. 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.