Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ğimaxOccurs1 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)
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ü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:anyTypeiçin desteklenir.Bunun basit tür kısıtlamaları,
xs:stringnumaralandırma veri sözleşmeleriyle eşlenmiş dışındaxs:enumerationherhangi 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:intbir tamsayıyla eşleninxs:intkı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,
DataContractSerializertü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,
DataContractSerializerhem temel tür hem de türetilmiş tür bildirimlerinde türündexs:anyTypebir öğeye sahip bir şema içeri aktarır. Özgün tür adı içindexs: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:chartüründe CharUnicode karakterlerini temsil etmek için kullanıma sunulmuştur.valuespace,xs:durationbir 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>