Referensi Skema Kontrak Data
Topik ini menjelaskan subset Skema XML (XSD) yang digunakan oleh DataContractSerializer untuk menjelaskan jenis runtime bahasa umum (CLR) untuk serialisasi XML.
Pemetaan DataContractSerializer
DataContractSerializer
memetakan jenis runtime bahasa umum ke XSD saat metadata diekspor dari layanan Windows Communication Foundation (WCF) menggunakan titik akhir metadata atau Alat Utilitas Metadata ServiceModel (Svcutil.exe). Untuk informasi selengkapnya, lihat Serializer Kontrak Data.
DataContractSerializer
juga memetakan XSD ke jenis CLR saat Svcutil.exe digunakan untuk mengakses dokumen Bahasa Deskripsi Layanan Web (WSDL) atau XSD dan membuat kontrak data untuk layanan atau klien.
Hanya instans Skema XML yang sesuai dengan persyaratan yang dinyatakan dalam dokumen ini yang dapat dipetakan ke jenis runtime bahasa umum menggunakan DataContractSerializer
.
Tingkat Dukungan
DataContractSerializer
menyediakan tingkat dukungan berikut untuk fitur Skema XML yang diberikan:
Didukung. Ada pemetaan eksplisit dari fitur ini ke jenis atau atribut runtime bahasa umum (atau keduanya) menggunakan
DataContractSerializer
.Diabaikan. Fitur ini diizinkan dalam skema yang diimpor oleh
DataContractSerializer
, tetapi tidak berpengaruh pada pembuatan kode.Terlarang.
DataContractSerializer
tidak mendukung pengimporan skema menggunakan fitur tersebut. Misalnya, Svcutil.exe, saat mengakses WSDL dengan skema yang menggunakan fitur tersebut, kembali menggunakan XmlSerializer sebagai gantinya. Hal ini diatur secara default.
Informasi Umum
Namespace layanan skema dijelaskan di Skema XML. Awalan "xs" digunakan dalam dokumen ini.
Atribut apa pun dengan namespace layanan non-skema diabaikan.
Setiap anotasi (kecuali yang dijelaskan dalam dokumen ini) diabaikan.
<xs:schema>: atribut
Atribut | DataContract |
---|---|
attributeFormDefault |
Diabaikan. |
blockDefault |
Diabaikan. |
elementFormDefault |
Harus memenuhi syarat. Semua elemen harus memenuhi syarat agar skema didukung oleh DataContractSerializer . Ini dapat dicapai dengan menyetel xs:schema/@elementFormDefault ke "qualified" atau dengan menyetel xs:element/@form ke "qualified" pada setiap deklarasi elemen individual. |
finalDefault |
Diabaikan. |
Id |
Diabaikan. |
targetNamespace |
Didukung dan dipetakan ke namespace layanan kontrak data. Jika atribut ini tidak ditentukan, namespace layanan kosong akan digunakan. Tidak boleh berupa namespace layanan http://schemas.microsoft.com/2003/10/Serialization/ yang dipesan. |
version |
Diabaikan. |
<xs:schema>: konten
Konten | Skema |
---|---|
include |
Didukung. DataContractSerializer mendukung xs:include dan xs:import. Namun, Svcutil.exe membatasi referensi xs:include/@schemaLocation dan xs:import/@location berikut saat metadata dimuat dari file lokal. Daftar file skema harus melewati mekanisme keluar dari pita dan bukan melalui include dalam kasus ini; include dokumen skema d diabaikan. |
redefine |
Terlarang. Penggunaan xs:redefine dilarang oleh DataContractSerializer karena alasan keamanan: x:redefine memerlukan schemaLocation untuk diikuti. Dalam keadaan tertentu, Svcutil.exe menggunakan DataContract membatasi penggunaan schemaLocation . |
import |
Didukung. DataContractSerializer mendukung xs:include dan xs:import . Namun, Svcutil.exe membatasi referensi xs:include/@schemaLocation dan xs:import/@location berikut saat metadata dimuat dari file lokal. Daftar file skema harus melewati mekanisme keluar dari pita dan bukan melalui include dalam kasus ini; include dokumen skema d diabaikan. |
simpleType |
Didukung. Baca bagian xs:simpleType . |
complexType |
Didukung, memetakan ke kontrak data. Baca bagian xs:complexType . |
group |
Diabaikan. DataContractSerializer tidak mendukung penggunaan xs:group , xs:attributeGroup , dan xs:attribute . Deklarasi ini diabaikan sebagai anak dari xs:schema , tetapi tidak dapat dirujuk dari dalam complexType atau konstruksi lain yang didukung. |
attributeGroup |
Diabaikan. DataContractSerializer tidak mendukung penggunaan xs:group , xs:attributeGroup , dan xs:attribute . Deklarasi ini diabaikan sebagai anak dari xs:schema , tetapi tidak dapat dirujuk dari dalam complexType atau konstruksi lain yang didukung. |
element |
Didukung. Lihat Deklarasi Elemen Global (GED). |
attribute |
Diabaikan. DataContractSerializer tidak mendukung penggunaan xs:group , xs:attributeGroup , dan xs:attribute . Deklarasi ini diabaikan sebagai anak dari xs:schema , tetapi tidak dapat dirujuk dari dalam complexType atau konstruksi lain yang didukung. |
notation |
Diabaikan. |
Jenis Kompleks – <xs:complexType>
Informasi Umum
Setiap jenis kompleks <xs:complexType> dipetakan ke kontrak data.
<xs:complexType>: atribut
Atribut | Skema |
---|---|
abstract |
Harus false (default). |
block |
Terlarang. |
final |
Diabaikan. |
id |
Diabaikan. |
mixed |
Harus false (default). |
name |
Didukung dan dipetakan ke nama kontrak data. Jika ada titik dalam nama, upaya dilakukan untuk memetakan jenis ke jenis dalam. Misalnya, tipe kompleks yang dinamai A.B memetakan ke tipe kontrak data yang merupakan tipe dalam dari jenis dengan A nama kontrak data, tetapi hanya jika jenis kontrak data tersebut ada. Lebih dari satu tingkat penyarangan dimungkinkan: misalnya, A.B.C dapat berupa tipe dalam, tetapi hanya jika A dan A.B keduanya ada. |
<xs:complexType>: konten
Konten | Skema |
---|---|
simpleContent |
Ekstensi dilarang. Pembatasan hanya diperbolehkan dari anySimpleType . |
complexContent |
Didukung. Lihat "Warisan". |
group |
Terlarang. |
all |
Terlarang. |
choice |
Terlarang |
sequence |
Didukung, memetakan ke anggota data kontrak data. |
attribute |
Dilarang, bahkan jika use="prohibited" (dengan satu pengecualian). Hanya atribut opsional dari namespace layanan Skema Serialisasi Standar yang didukung. Ini tidak memetakan ke anggota data dalam model pemrograman kontrak data. Saat ini, hanya satu atribut tersebut yang memiliki arti dan dibahas di bagian ISerializable. Yang lain diabaikan. |
attributeGroup |
Terlarang. Dalam rilis WCF v1, DataContractSerializer mengabaikan keberadaan attributeGroup di dalam xs:complexType . |
anyAttribute |
Terlarang. |
(kosong) | Memetakan ke kontrak data tanpa anggota data. |
<xs:sequence> dalam jenis kompleks: atribut
Atribut | Skema |
---|---|
id |
Diabaikan. |
maxOccurs |
Harus 1 (default). |
minOccurs |
Harus 1 (default). |
<xs:sequence> dalam jenis kompleks: konten
Konten | Skema |
---|---|
element |
Setiap instans memetakan ke anggota data. |
group |
Terlarang. |
choice |
Terlarang. |
sequence |
Terlarang. |
any |
Terlarang. |
(kosong) | Memetakan ke kontrak data tanpa anggota data. |
Elemen – <xs:element>
Informasi Umum
<xs:element>
dapat terjadi dalam konteks berikut:
Ini dapat terjadi dalam
<xs:sequence>
, yang menjelaskan anggota data dari kontrak data reguler (non-kumpulan). Dalam hal ini, atributmaxOccurs
harus 1. (Nilai 0 tidak diperbolehkan).Ini dapat terjadi dalam
<xs:sequence>
, yang menjelaskan anggota data dari kontrak pengumpulan data. Dalam hal ini, atributmaxOccurs
harus lebih besar dari 1 atau "tidak terbatas".Ini dapat terjadi dalam
<xs:schema>
sebagai Deklarasi Elemen Global (GED).
<xs:element> dengan maxOccurs=1 dalam <xs:sequence> (Anggota Data)
Atribut | Skema |
---|---|
ref |
Terlarang. |
name |
Didukung, memetakan ke nama anggota data. |
type |
Didukung, memetakan ke jenis anggota data. Untuk informasi selengkapnya, lihat Pemetaan jenis/primitif. Jika tidak ditentukan (dan elemen tidak berisi jenis anonim), xs:anyType diasumsikan. |
block |
Diabaikan. |
default |
Terlarang. |
fixed |
Terlarang. |
form |
Harus memenuhi syarat. Atribut ini dapat diatur melalui elementFormDefault pada xs:schema . |
id |
Diabaikan. |
maxOccurs |
1 |
minOccurs |
Memetakan ke properti IsRequired dari anggota data (IsRequired benar jika minOccurs adalah 1). |
nillable |
Mempengaruhi pemetaan jenis. Lihat Pemetaan jenis/primitif. |
<xs:element> dengan maxOccurs>1 dalam xs <:sequence> (Collections)
Memetakan ke CollectionDataContractAttribute.
Dalam jenis kumpulan, hanya satu xs:elemen yang diperbolehkan dalam xs:urutan.
Kumpulan dapat berupa jenis berikut:
Kumpulan reguler (misalnya, array).
Kumpulan kamus (memetakan satu nilai ke nilai lainnya; misalnya, Hashtable).
Satu-satunya perbedaan antara kamus dan larik tipe pasangan kunci/nilai adalah pada model pemrograman yang dihasilkan. Ada mekanisme anotasi skema yang dapat digunakan untuk menunjukkan bahwa jenis yang diberikan adalah kumpulan kamus.
Aturan untuk atribut ref
, block
, default
, fixed
, form
, dan id
sama seperti untuk kasus non-kumpulan. Atribut lain termasuk yang ada dalam tabel berikut.
Atribut | Skema |
---|---|
name |
Didukung, memetakan ke properti ItemName di atribut CollectionDataContractAttribute . |
type |
Didukung, memetakan ke jenis yang disimpan dalam kumpulan. |
maxOccurs |
Lebih besar dari 1 atau "tidak terikat". Skema DC harus menggunakan "tidak terikat". |
minOccurs |
Diabaikan. |
nillable |
Mempengaruhi pemetaan jenis. Atribut ini diabaikan untuk kumpulan kamus. |
<xs:element> dalam Deklarasi Elemen Global <xs:schema>
Deklarasi Elemen Global (GED) yang memiliki nama dan ruang nama yang sama dengan jenis dalam skema, atau yang mendefinisikan jenis anonim di dalamnya, dikatakan terkait dengan jenis tersebut.
Ekspor skema: GED terkait dihasilkan untuk setiap jenis yang dihasilkan, baik sederhana maupun kompleks.
Deserialisasi/serialisasi: GED terkait digunakan sebagai elemen akar untuk jenis tersebut.
Impor skema: GED terkait tidak diperlukan dan diabaikan jika mengikuti aturan berikut (kecuali mereka menentukan jenis).
Atribut | Skema |
---|---|
abstract |
Harus false untuk GED terkait. |
block |
Dilarang dalam GED terkait. |
default |
Dilarang dalam GED terkait. |
final |
Harus false untuk GED terkait. |
fixed |
Dilarang dalam GED terkait. |
id |
Diabaikan. |
name |
Didukung. Lihat definisi GED terkait. |
nillable |
Harus true untuk GED terkait. |
substitutionGroup |
Dilarang dalam GED terkait. |
type |
Didukung, dan harus cocok dengan jenis terkait untuk GED terkait (kecuali elemen berisi jenis anonim). |
<xs:element>: konten
Konten | Skema |
---|---|
simpleType |
Didukung.* |
complexType |
Didukung.* |
unique |
Diabaikan. |
key |
Diabaikan. |
keyref |
Diabaikan. |
(kosong) | Didukung. |
* Saat menggunakan pemetaan simpleType
dan complexType,
untuk jenis anonim sama seperti untuk jenis non-anonim, kecuali bahwa tidak ada kontrak data anonim, sehingga kontrak data yang dinamai dibuat, dengan nama yang dihasilkan berasal dari nama elemen. Aturan untuk jenis anonim ada dalam daftar berikut:
Detail implementasi WCF: Jika nama
xs:element
tidak berisi titik, jenis anonim memetakan ke jenis dalam dari jenis kontrak data luar. Jika nama berisi titik, jenis kontrak data yang dihasilkan bersifat independen (bukan jenis dalam).Nama kontrak data jenis dalam yang dihasilkan adalah nama kontrak data jenis luar diikuti dengan titik, nama elemen, dan string "Jenis".
Jika kontrak data dengan nama seperti itu sudah ada, namanya dibuat unik dengan menambahkan "1", "2", "3", dan sebagainya sampai nama unik dibuat.
Jenis Sederhana - <xs:simpleType>
<xs:simpleType>: atribut
Atribut | Skema |
---|---|
final |
Diabaikan. |
id |
Diabaikan. |
name |
Didukung, memetakan ke nama kontrak data. |
<xs:simpleType>: konten
Konten | Skema |
---|---|
restriction |
Didukung. Peta ke kontrak data enumerasi. Atribut ini diabaikan jika tidak cocok dengan pola enumerasi. Lihat bagian batasan xs:simpleType . |
list |
Didukung. Memetakan untuk memberi bendera kontrak data enumerasi. Lihat bagian daftar xs:simpleType . |
union |
Terlarang. |
<xs:restriction>
Pembatasan jenis kompleks hanya didukung untuk base="
xs:anyType
".Pembatasan jenis sederhana
xs:string
yang tidak memiliki aspek pembatasan selainxs:enumeration
dipetakan ke kontrak data enumerasi.Semua pembatasan jenis sederhana lainnya dipetakan ke jenis yang dibatasi. Misalnya, pembatasan
xs:int
memetakan ke bilangan bulat, seperti halnyaxs:int
itu sendiri. Untuk informasi selengkapnya tentang pemetaan jenis primitif, lihat Pemetaan jenis/primitif.
<xs:restriction>: atribut
Atribut | Skema |
---|---|
base |
Harus berupa jenis sederhana yang didukung atau xs:anyType . |
id |
Diabaikan. |
<xs:pembatasan> untuk semua kasus lainnya: konten
Konten | Skema |
---|---|
simpleType |
Jika ada, harus berasal dari jenis primitif yang didukung. |
minExclusive |
Diabaikan. |
minInclusive |
Diabaikan. |
maxExclusive |
Diabaikan. |
maxInclusive |
Diabaikan. |
totalDigits |
Diabaikan. |
fractionDigits |
Diabaikan. |
length |
Diabaikan. |
minLength |
Diabaikan. |
maxLength |
Diabaikan. |
enumeration |
Diabaikan. |
whiteSpace |
Diabaikan. |
pattern |
Diabaikan. |
(kosong) | Didukung. |
Enumeration
<xs:pembatasan> untuk enumerasi: atribut
Atribut | Skema |
---|---|
base |
Jika ada, harus xs:string . |
id |
Diabaikan. |
<xs:pembatasan> untuk enumerasi: konten
Konten | Skema |
---|---|
simpleType |
Jika ada, harus berupa pembatasan enumerasi yang didukung oleh kontrak data (bagian ini). |
minExclusive |
Diabaikan. |
minInclusive |
Diabaikan. |
maxExclusive |
Diabaikan. |
maxInclusive |
Diabaikan. |
totalDigits |
Diabaikan. |
fractionDigits |
Diabaikan. |
length |
Terlarang. |
minLength |
Terlarang. |
maxLength |
Terlarang. |
enumeration |
Didukung. Enumerasi "id" diabaikan, dan "nilai" dipetakan ke nama nilai dalam kontrak data enumerasi. |
whiteSpace |
Terlarang. |
pattern |
Terlarang. |
(kosong) | Didukung, peta ke jenis enumerasi kosong. |
Kode berikut menunjukkan kelas enumerasi C#.
public enum MyEnum
{
first = 3,
second = 4,
third =5
}
Kelas ini memetakan ke skema berikut oleh DataContractSerializer
. Jika nilai enumerasi dimulai dari 1, blok xs:annotation
tidak dihasilkan.
<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
memetakan jenis enumerasi yang ditandai dengan System.FlagsAttribute
hingga xs:list
turunan dari xs:string
. Tidak ada variasi xs:list
lain yang didukung.
<xs:list>: atribut
Atribut | Skema |
---|---|
itemType |
Terlarang. |
id |
Diabaikan. |
<xs:list>: konten
Konten | Skema |
---|---|
simpleType |
Harus dibatasi dari xs:string menggunakan faset xs:enumeration . |
Jika nilai enumerasi tidak mengikuti pangkat 2 progresi (default untuk Bendera), nilai disimpan dalam elemen xs:annotation/xs:appInfo/ser:EnumerationValue
.
Misalnya, kode berikut menandai jenis enumerasi.
[Flags]
public enum AuthFlags
{
AuthAnonymous = 1,
AuthBasic = 2,
AuthNTLM = 4,
AuthMD5 = 16,
AuthWindowsLiveID = 64,
}
Jenis ini memetakan ke skema berikut.
<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>
Warisan
Aturan umum
Kontrak data dapat diwarisi dari kontrak data lain. Kontrak data tersebut dipetakan ke basis dan diturunkan oleh jenis ekstensi menggunakan konstruksi Skema XML <xs:extension>
.
Kontrak data tidak dapat mewarisi dari kontrak data pengumpulan.
Misalnya, kode berikut adalah kontrak data.
[DataContract]
public class Person
{
[DataMember]
public string Name;
}
[DataContract]
public class Employee : Person
{
[DataMember]
public int ID;
}
Kontrak data ini memetakan ke deklarasi jenis Skema XML berikut.
<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>: atribut
Atribut | Skema |
---|---|
id |
Diabaikan. |
mixed |
Harus false. |
<xs:complexContent>: konten
Konten | Skema |
---|---|
restriction |
Dilarang, kecuali saat base=""xs:anyType . Yang terakhir ini setara dengan menempatkan konten xs:restriction langsung di bawah kontainer xs:complexContent . |
extension |
Didukung. Memetakan ke pewarisan kontrak data. |
<xs:extension> dalam <xs:complexContent>: atribut
Atribut | Skema |
---|---|
id |
Diabaikan. |
base |
Didukung. Memetakan ke jenis kontrak data dasar yang diwarisi jenis ini. |
<xs:extension> di <xs:complexContent>: konten
Aturannya sama dengan untuk konten <xs:complexType>
.
Jika <xs:sequence>
disediakan, elemen anggotanya dipetakan ke anggota data tambahan yang ada dalam kontrak data turunan.
Jika jenis turunan berisi elemen dengan nama yang sama dengan elemen dalam jenis dasar, deklarasi elemen duplikat dipetakan ke anggota data dengan nama yang dihasilkan menjadi unik. Bilangan bulat positif ditambahkan ke nama anggota data ("member1", "member2", dan seterusnya) sampai nama unik ditemukan. Sebaliknya:
Jika kontrak data turunan memiliki anggota data dengan nama dan jenis yang sama sebagai anggota data dalam kontrak data dasar,
DataContractSerializer
menghasilkan elemen yang sesuai ini dalam jenis turunan.Jika kontrak data turunan memiliki anggota data dengan nama yang sama sebagai anggota data dalam kontrak data dasar tetapi jenis yang berbeda,
DataContractSerializer
mengimpor skema dengan elemen jenisxs:anyType
di jenis dasar dan jenis turunan deklarasi. Nama jenis asli dipertahankan dixs:annotations/xs:appInfo/ser:ActualType/@Name
.
Kedua variasi dapat mengarah ke skema dengan model konten yang ambigu, yang bergantung pada urutan anggota data masing-masing.
Pemetaan jenis/primitif
DataContractSerializer
menggunakan pemetaan berikut untuk jenis primitif Skema XML.
Jenis XSD | Jenis .NET |
---|---|
anyType |
Object. |
anySimpleType |
String. |
duration |
TimeSpan. |
dateTime |
DateTime. |
dateTimeOffset |
DateTime dan TimeSpan untuk offset. Lihat Serialisasi DateTimeOffset di bawah ini. |
time |
String. |
date |
String. |
gYearMonth |
String. |
gYear |
String. |
gMonthDay |
String. |
gDay |
String. |
gMonth |
String. |
boolean |
Boolean |
base64Binary |
array Byte. |
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. |
Pemetaan jenis ISerializable
Dalam .NET Framework versi 1.0, ISerializable diperkenalkan sebagai mekanisme umum untuk membuat serial objek untuk persistensi atau transfer data. Ada banyak jenis .NET Framework yang mengimplementasikan ISerializable
dan yang dapat diteruskan antar aplikasi. DataContractSerializer secara alami memberikan dukungan untuk kelas ISerializable
. Jenis skema implementasi DataContractSerializer
memetakan ISerializable
yang hanya berbeda berdasarkan QName (nama yang memenuhi syarat) dari jenis dan secara efektif merupakan kumpulan properti. Misalnya, DataContractSerializer
memetakan Exception ke jenis XSD berikut di namespace layanan 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>
Atribut opsional ser:FactoryType
yang dideklarasikan dalam skema Serialisasi Kontrak Data merujuk pada kelas pabrik yang dapat membatalkan serialisasi jenis. Kelas pabrik harus menjadi bagian dari kumpulan jenis yang diketahui dari instans DataContractSerializer
yang digunakan. Untuk informasi selengkapnya tentang jenis yang diketahui, lihat Jenis Kontrak Data yang Diketahui.
Skema Serialisasi DataContract
Sejumlah skema yang diekspor oleh DataContractSerializer
menggunakan jenis, elemen, dan atribut dari namespace Serialisasi Kontrak Data khusus:
http://schemas.microsoft.com/2003/10/Serialization
Berikut ini adalah deklarasi skema Serialisasi Kontrak Data lengkap.
<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>
Berikut ini harus diperhatikan:
ser:char
diperkenalkan untuk mewakili karakter Unicode jenis Char.valuespace
darixs:duration
dikurangi menjadi kumpulan terurut sehingga dapat dipetakan ke TimeSpan.FactoryType
digunakan dalam skema yang diekspor dari jenis turunan dari ISerializable.
Mengimpor skema non-DataContract
DataContractSerializer
memiliki opsi ImportXmlTypes
untuk mengizinkan impor skema yang tidak sesuai dengan profil DataContractSerializer
XSD (lihat properti Options). Mengatur opsi ini ke true
memungkinkan penerimaan jenis skema yang tidak sesuai dan memetakannya ke implementasi berikut, IXmlSerializable menggabungkan array XmlNode (hanya nama kelas yang berbeda).
[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;
}
}
Serialisasi DateTimeOffset
DateTimeOffset tidak diperlakukan sebagai jenis primitif. Sebaliknya, ini diserialisasikan sebagai elemen kompleks dengan dua bagian. Bagian pertama mewakili waktu tanggal, dan bagian kedua mewakili offset dari waktu tanggal. Contoh nilai DateTimeOffset berseri diperlihatkan dalam kode berikut.
<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>
Skemanya adalah sebagai berikut.
<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>