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 DataContractSerializer
CLR 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
DataContractSerializer
CLR 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 DataContractSerializer desteklenmesi 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ı schemaLocation kısıtlar. |
import |
Destekleniyor. DataContractSerializer ve 'i xs:import desteklerxs: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:attributeGroup ve xs:attribute kullanımını xs:group desteklemez. Bu bildirimler öğesinin xs:schema alt öğeleri olarak yoksayılır, ancak içinden complexType veya desteklenen diğer yapılardan başvurulamaz. |
attributeGroup |
Göz ardı. DataContractSerializer , xs:attributeGroup ve xs:attribute kullanımını xs:group desteklemez. Bu bildirimler öğesinin xs:schema alt öğ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:attributeGroup ve xs:attribute kullanımını xs:group desteklemez. Bu bildirimler öğesinin xs:schema alt öğ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 A bir 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 anySimpleType izin 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:complexType varlığı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ğimaxOccurs
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:schema aracı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)
bir CollectionDataContractAttributeile eşler.
Koleksiyon türlerinde, xs:sequence içinde yalnızca bir xs:elemente izin verilir.
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
, fixed
form
, 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ışındaxs: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:anyType olmalı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>
DataContractSerializer
ile işaretlenen numaralandırma türlerini' den xs:string
türetilmiş olarak System.FlagsAttribute
xs: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:complexContent eş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ündexs:anyType
bir öğeye sahip bir şemayı içeri aktarır. Özgün tür adı içindexs:annotations/xs:appInfo/ser:ActualType/@Name
korunur.
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.,
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
DataContractSerializer
ImportXmlTypes
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>