Adatszerződés sémareferenciája
Ez a témakör az XML-séma (XSD) azon részhalmazát ismerteti, amelyet az DataContractSerializer XML-szerializálás gyakori nyelvi futtatókörnyezeti (CLR) típusainak leírására használnak.
DataContractSerializer-leképezések
A DataContractSerializer
CLR-típusokat az XSD-re képezi le, amikor metaadatokat exportál egy Windows Communication Foundation (WCF) szolgáltatásból metaadat-végpont vagy a ServiceModel Metadata Utility Tool (Svcutil.exe) használatával. További információ: Adatszerződés szerializálója.
Az DataContractSerializer
XSD-t clr-típusokra is leképeződnek, ha Svcutil.exe a webszolgáltatások leírási nyelvéhez (WSDL) vagy XSD-dokumentumokhoz való hozzáféréshez, valamint szolgáltatások vagy ügyfelek adatszerződéseinek létrehozásához használják.
A használatával csak az ebben a dokumentumban meghatározott követelményeknek megfelelő XML-sémapéldányok képezhetők le CLR-típusokra DataContractSerializer
.
Támogatási szintek
Az DataContractSerializer
alábbi támogatási szinteket biztosítja egy adott XML-sémafunkcióhoz:
Támogatott. A szolgáltatás explicit módon megfelelteti a CLR-típusokat vagy attribútumokat (vagy mindkettőt) a használatával
DataContractSerializer
.Figyelmen kívül hagyva. A funkció a által importált
DataContractSerializer
sémákban engedélyezett, de nincs hatással a kódgenerálásra.Tiltott. A
DataContractSerializer
szolgáltatás nem támogatja a séma importálását a funkcióval. Például Svcutil.exe, amikor egy ilyen funkciót használó sémával fér hozzá egy WSDL-hez, visszaesik a helyett.XmlSerializer Ez alapértelmezés szerint így van.
Általános információk
A sémanévteret az XML-séma ismerteti. Ebben a dokumentumban az "xs" előtagot használjuk.
A rendszer figyelmen kívül hagyja a nem sémanévtérrel rendelkező attribútumokat.
A rendszer figyelmen kívül hagyja a széljegyzeteket (kivéve az ebben a dokumentumban leírtakat).
<xs:schema>: attribútumok
Attribútum | DataContract |
---|---|
attributeFormDefault |
Figyelmen kívül hagyja. |
blockDefault |
Figyelmen kívül hagyja. |
elementFormDefault |
Minősítettnek kell lennie. Az összes elemnek rendelkeznie kell egy olyan sémához, amelyet DataContractSerializer a program támogat. Ez az xs:schema/@elementFormDefault "qualified" értékre állításával vagy az xs:element/@form minden egyes elemdeklaráción "minősített" értékre állításával valósítható meg. |
finalDefault |
Figyelmen kívül hagyja. |
Id |
Figyelmen kívül hagyja. |
targetNamespace |
Támogatott, és az adatszerződés névterére van leképezve. Ha ez az attribútum nincs megadva, a rendszer az üres névteret használja. Nem lehet fenntartott névtér http://schemas.microsoft.com/2003/10/Serialization/ . |
version |
Figyelmen kívül hagyja. |
<xs:schema>: contents
Tartalom | Séma |
---|---|
include |
Támogatott. DataContractSerializer támogatja az xs:include és az xs:import elemet. A Svcutil.exe azonban korlátozza a követéseket xs:include/@schemaLocation és xs:import/@location a hivatkozásokat, ha a metaadatok egy helyi fájlból töltődnek be. A sémafájlok listáját sávon kívüli mechanizmuson keresztül kell átadni, ebben az esetben nem include ; include a rendszer figyelmen kívül hagyja a sémadokumentumokat. |
redefine |
Tiltott. A használatot xs:redefine biztonsági okokból tiltják DataContractSerializer : x:redefine követni kell schemaLocation . Bizonyos körülmények között a DataContract Svcutil.exe korlátozza a schemaLocation használatát. |
import |
Támogatott. DataContractSerializer támogatja xs:include a és xs:import a elemet. A Svcutil.exe azonban korlátozza a követéseket xs:include/@schemaLocation és xs:import/@location a hivatkozásokat, ha a metaadatok egy helyi fájlból töltődnek be. A sémafájlok listáját sávon kívüli mechanizmuson keresztül kell átadni, ebben az esetben nem include ; include a rendszer figyelmen kívül hagyja a sémadokumentumokat. |
simpleType |
Támogatott. Lásd: xs:simpleType . |
complexType |
Támogatott, adatszerződések leképezése. Lásd: xs:complexType . |
group |
Figyelmen kívül hagyja. DataContractSerializer nem támogatja a , xs:attributeGroup és xs:attribute a xs:group használatát. Ezeket a deklarációkat a program figyelmen kívül hagyja, mint a gyermekét xs:schema , de nem hivatkozhat azokra belülről complexType vagy más támogatott szerkezetekből. |
attributeGroup |
Figyelmen kívül hagyja. DataContractSerializer nem támogatja a , xs:attributeGroup és xs:attribute a xs:group használatát. Ezeket a deklarációkat a program figyelmen kívül hagyja, mint a gyermekét xs:schema , de nem hivatkozhat azokra belülről complexType vagy más támogatott szerkezetekből. |
element |
Támogatott. Lásd: Globális elemdeklaráció (GED). |
attribute |
Figyelmen kívül hagyja. DataContractSerializer nem támogatja a , xs:attributeGroup és xs:attribute a xs:group használatát. Ezeket a deklarációkat a program figyelmen kívül hagyja, mint a gyermekét xs:schema , de nem hivatkozhat azokra belülről complexType vagy más támogatott szerkezetekből. |
notation |
Figyelmen kívül hagyja. |
Összetett típusok – <xs:complexType>
Általános információk
Minden xs:complexType> típusú <komplex adatszerződést képez le.
<xs:complexType>: attribútumok
Attribútum | Séma |
---|---|
abstract |
Hamisnak kell lennie (alapértelmezett). |
block |
Tiltott. |
final |
Figyelmen kívül hagyja. |
id |
Figyelmen kívül hagyja. |
mixed |
Hamisnak kell lennie (alapértelmezett). |
name |
Támogatott, és az adatszerződés nevére van leképezve. Ha a névben vannak időszakok, a rendszer megpróbálja leképezni a típust egy belső típusra. Egy nevű A.B összetett típus például adatszerződés-típusra képez le egy adatszerződés-típust, amely az adatszerződés nevével A rendelkező típus belső típusa, de csak akkor, ha létezik ilyen adatszerződéstípus. Több szintű beágyazás is lehetséges: például belső típus lehet, A.B.C de csak akkor, ha A és A.B mindkettő létezik. |
<xs:complexType>: tartalom
Tartalom | Séma |
---|---|
simpleContent |
A bővítmények tilosak. A korlátozás csak a forrásból anySimpleType engedélyezett. |
complexContent |
Támogatott. Lásd: "Öröklés". |
group |
Tiltott. |
all |
Tiltott. |
choice |
Forbidden |
sequence |
Támogatott, adatszerződés adattagjainak leképezése. |
attribute |
Tiltott, még akkor is, ha use="tiltott" (egy kivétellel). Csak a standard szerializálási séma névteréből származó választható attribútumok támogatottak. Az adatszerződés programozási modelljében nem képeznek le adattagokat. Jelenleg csak egy ilyen attribútumnak van jelentése, és az ISerializable szakaszban tárgyaljuk. A rendszer figyelmen kívül hagyja az összes többit. |
attributeGroup |
Tiltott. A WCF v1 kiadásban DataContractSerializer figyelmen kívül hagyja a belső jelenlétét attributeGroup xs:complexType . |
anyAttribute |
Tiltott. |
(üres) | Adatszerződést képez le adattagok nélkül. |
<xs:sequence> összetett típusban: attribútumok
Attribútum | Séma |
---|---|
id |
Figyelmen kívül hagyja. |
maxOccurs |
Az alapértelmezett értéknek 1-nek kell lennie. |
minOccurs |
Az alapértelmezett értéknek 1-nek kell lennie. |
<xs:sequence> összetett típusban: tartalom
Tartalom | Séma |
---|---|
element |
Minden példány leképz egy adattagot. |
group |
Tiltott. |
choice |
Tiltott. |
sequence |
Tiltott. |
any |
Tiltott. |
(üres) | Adatszerződést képez le adattagok nélkül. |
Elemek – <xs:element>
Általános információk
<xs:element>
a következő környezetekben fordulhat elő:
Ez történhet egy
<xs:sequence>
, amely egy normál (nem gyűjtési) adatszerződés adattagját írja le. Ebben az esetben azmaxOccurs
attribútumnak 1-nek kell lennie. (A 0 érték nem megengedett).Ez a
<xs:sequence>
gyűjteményadat-szerződés egy adattagját leíró fájlon belül fordulhat elő. Ebben az esetben azmaxOccurs
attribútumnak 1-nél nagyobbnak vagy "kötetlennek" kell lennie.Ez globális elemdeklarációként (GED) belül fordulhat elő
<xs:schema>
.
<xs:element> with maxOccurs=1 within an <xs:sequence> (Data Members)
Attribútum | Séma |
---|---|
ref |
Tiltott. |
name |
Támogatott, leképezi az adattag nevét. |
type |
Támogatott, leképezi az adattag típusát. További információ: Típus/primitív leképezés. Ha nincs megadva (és az elem nem tartalmaz névtelen típust), xs:anyType a rendszer feltételezi. |
block |
Figyelmen kívül hagyja. |
default |
Tiltott. |
fixed |
Tiltott. |
form |
Minősítettnek kell lennie. Ez az attribútum a következőn állítható be elementFormDefault : xs:schema . |
id |
Figyelmen kívül hagyja. |
maxOccurs |
1 |
minOccurs |
IsRequired Egy adattag tulajdonságára képez le térképet (IsRequired igaz, ha minOccurs 1). |
nillable |
Hatással van a típusleképezésre. Lásd: Típus/primitív leképezés. |
<xs:element> with maxOccurs>1 within an <xs:sequence> (Gyűjtemények)
Leképesedik egy fájlra CollectionDataContractAttribute.
A gyűjteménytípusokban csak egy xs:elem engedélyezett egy xs:szekvencián belül.
A gyűjtemények a következő típusúak lehetnek:
Normál gyűjtemények (például tömbök).
Szótárgyűjtemények (egy érték hozzárendelése egy másikhoz; például egy Hashtable).
A szótár és a kulcs/érték pár típusú tömb közötti egyetlen különbség a létrehozott programozási modellben van. Van egy sémajegyzet-mechanizmus, amely azt jelzi, hogy egy adott típus egy szótárgyűjtemény.
A , block
, default
, fixed
, form
és id
attribútumok szabályai ref
megegyeznek a nem gyűjtési eset szabályaival. Az egyéb attribútumok közé tartoznak az alábbi táblázatban szereplő attribútumok is.
Attribútum | Séma |
---|---|
name |
Támogatott, leképezi a ItemName tulajdonságot az CollectionDataContractAttribute attribútumban. |
type |
Támogatott, a gyűjteményben tárolt típusra képez le térképet. |
maxOccurs |
1-nél nagyobb vagy "kötetlen". A DC-sémának "kötetlen" értéket kell használnia. |
minOccurs |
Figyelmen kívül hagyja. |
nillable |
Hatással van a típusleképezésre. Ezt az attribútumot a rendszer figyelmen kívül hagyja a szótárgyűjtemények esetében. |
<xs:elem> xs <:schema> Globális elem deklarációja
Egy globális elemdeklaráció (GED), amelynek neve és névtere megegyezik a sémában szereplő típussal, vagy amely magában definiál egy névtelen típust, azt mondják, hogy a típushoz társítva van.
Sémaexportálás: a társított GED-k minden generált típushoz létre lesznek hozva, mind egyszerű, mind összetett.
Deszerializálás/szerializálás: a társított GED-k a típus gyökérelemei.
Sémaimportálás: a társított GED-k nem szükségesek, és figyelmen kívül lesznek hagyva, ha az alábbi szabályokat követik (kivéve, ha típusokat határoznak meg).
Attribútum | Séma |
---|---|
abstract |
A társított GED-k esetében hamisnak kell lennie. |
block |
Tiltott a társított GED-kben. |
default |
Tiltott a társított GED-kben. |
final |
A társított GED-k esetében hamisnak kell lennie. |
fixed |
Tiltott a társított GED-kben. |
id |
Figyelmen kívül hagyja. |
name |
Támogatott. Lásd a társított GED-k definícióját. |
nillable |
A társított GED-k esetében igaznak kell lennie. |
substitutionGroup |
Tiltott a társított GED-kben. |
type |
Támogatott, és meg kell egyeznie a társított GED-k társított típusával (kivéve, ha az elem névtelen típust tartalmaz). |
<xs:elem>: tartalom
Tartalom | Séma |
---|---|
simpleType |
Támogatott.* |
complexType |
Támogatott.* |
unique |
Figyelmen kívül hagyja. |
key |
Figyelmen kívül hagyja. |
keyref |
Figyelmen kívül hagyja. |
(üres) | Támogatott. |
* Ha a és complexType,
a simpleType
leképezést használja a névtelen típusok esetében, ugyanaz, mint a nem névtelen típusok esetében, azzal a kivétellel, hogy nincsenek névtelen adatszerződések, így létrejön egy névvel ellátott adatszerződés, amely az elem nevéből származik. A névtelen típusok szabályai a következő listában találhatók:
WCF-megvalósítás részletei: Ha a
xs:element
név nem tartalmaz időszakokat, a névtelen típus a külső adatszerződés típusának belső típusára képez le. Ha a név időszakokat tartalmaz, az eredményként kapott adatszerződés típusa független (nem belső típus).A belső típus generált adatszerződésének neve a külső típus adatszerződésének neve, amelyet egy időszak, az elem neve és a "Típus" sztring követ.
Ha már létezik ilyen nevű adatszerződés, a név egyedivé lesz téve az "1", "2", "3" stb. hozzáfűzésével, amíg létre nem jön egy egyedi név.
Egyszerű típusok – <xs:simpleType>
<xs:simpleType>: attribútumok
Attribútum | Séma |
---|---|
final |
Figyelmen kívül hagyja. |
id |
Figyelmen kívül hagyja. |
name |
Támogatott, leképezi az adatszerződés nevét. |
<xs:simpleType>: tartalom
Tartalom | Séma |
---|---|
restriction |
Támogatott. Leképezés adatszerződések számbavételéhez. A rendszer figyelmen kívül hagyja ezt az attribútumot, ha nem egyezik meg az enumerálási mintával. Tekintse meg a xs:simpleType korlátozások szakaszt. |
list |
Támogatott. Térképek az enumerálási adatszerződések megjelöléséhez. Tekintse meg a xs:simpleType listák szakaszt. |
union |
Tiltott. |
<xs:korlátozás>
Az összetett típuskorlátozások csak a base=""
xs:anyType
esetében támogatottak.Az egyszerű típusú korlátozások
xs:string
nem rendelkeznek más korlátozási szempontokkal, mintxs:enumeration
amelyek az adatszerződések számbavételére vannak leképezve.Az összes többi egyszerű típuskorlátozás az általuk korlátozott típusokra van leképezve. Például egy egész számra vonatkozó térképek korlátozása
xs:int
, ahogyanxs:int
maga is teszi. A primitív típusleképezésről további információt a Típus/primitív leképezés című témakörben talál.
<xs:restriction>: attribútumok
Attribútum | Séma |
---|---|
base |
Támogatott egyszerű típusnak vagy xs:anyType típusnak kell lennie. |
id |
Figyelmen kívül hagyja. |
<xs:korlátozás> minden más esetben: tartalom
Tartalom | Séma |
---|---|
simpleType |
Ha jelen van, támogatott primitív típusból kell származnia. |
minExclusive |
Figyelmen kívül hagyja. |
minInclusive |
Figyelmen kívül hagyja. |
maxExclusive |
Figyelmen kívül hagyja. |
maxInclusive |
Figyelmen kívül hagyja. |
totalDigits |
Figyelmen kívül hagyja. |
fractionDigits |
Figyelmen kívül hagyja. |
length |
Figyelmen kívül hagyja. |
minLength |
Figyelmen kívül hagyja. |
maxLength |
Figyelmen kívül hagyja. |
enumeration |
Figyelmen kívül hagyja. |
whiteSpace |
Figyelmen kívül hagyja. |
pattern |
Figyelmen kívül hagyja. |
(üres) | Támogatott. |
Enumerálás
<xs:enumerációk korlátozása> : attribútumok
Attribútum | Séma |
---|---|
base |
Ha jelen van, akkor a kell lennie xs:string . |
id |
Figyelmen kívül hagyja. |
<xs:enumerációk korlátozása> : tartalom
Tartalom | Séma |
---|---|
simpleType |
Ha van ilyen, az adatszerződés által támogatott számbavételi korlátozásnak kell lennie (ez a szakasz). |
minExclusive |
Figyelmen kívül hagyja. |
minInclusive |
Figyelmen kívül hagyja. |
maxExclusive |
Figyelmen kívül hagyja. |
maxInclusive |
Figyelmen kívül hagyja. |
totalDigits |
Figyelmen kívül hagyja. |
fractionDigits |
Figyelmen kívül hagyja. |
length |
Tiltott. |
minLength |
Tiltott. |
maxLength |
Tiltott. |
enumeration |
Támogatott. A rendszer figyelmen kívül hagyja az "id" számbavételt, és az "érték" az enumerálási adatszerződésben szereplő értéknévre lesz leképezve. |
whiteSpace |
Tiltott. |
pattern |
Tiltott. |
(üres) | Támogatott, üres enumerálási típusra van leképezve. |
Az alábbi kód egy C# enumerálási osztályt mutat be.
public enum MyEnum
{
first = 3,
second = 4,
third =5
}
Ez az osztály a következő sémára képez le a következő sémát: DataContractSerializer
. Ha az enumerálási értékek 1-ről indulnak, xs:annotation
a rendszer nem hoz létre blokkokat.
<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
a leképezések enumerálási típusainak jelölése a System.FlagsAttribute
származtatáshoz xs:list
xs:string
. Más xs:list
változatok nem támogatottak.
<xs:list>: attribútumok
Attribútum | Séma |
---|---|
itemType |
Tiltott. |
id |
Figyelmen kívül hagyja. |
<xs:list>: tartalom
Tartalom | Séma |
---|---|
simpleType |
Az aspektus használatának xs:enumeration korlátozása xs:string kötelező. |
Ha az enumerálási érték nem követi a 2 progressziós értéket (a jelzők alapértelmezett értéke), az érték az xs:annotation/xs:appInfo/ser:EnumerationValue
elemben lesz tárolva.
Az alábbi kód például egy enumerálási típust jelöl.
[Flags]
public enum AuthFlags
{
AuthAnonymous = 1,
AuthBasic = 2,
AuthNTLM = 4,
AuthMD5 = 16,
AuthWindowsLiveID = 64,
}
Ez a típus a következő sémára képez le leképezést.
<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>
Öröklődés
Általános szabályok
Az adatszerződések öröklődhetnek egy másik adatszerződésből. Az ilyen adatszerződések egy alapra képeznek le, és bővítménytípusokból származnak az <xs:extension>
XML-séma szerkezetének használatával.
Az adatszerződések nem örökölhetők adatgyűjtési adatszerződésből.
Az alábbi kód például egy adatszerződés.
[DataContract]
public class Person
{
[DataMember]
public string Name;
}
[DataContract]
public class Employee : Person
{
[DataMember]
public int ID;
}
Ez az adatszerződés a következő XML-sématípus-deklarációra képez le.
<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>: attribútumok
Attribútum | Séma |
---|---|
id |
Figyelmen kívül hagyja. |
mixed |
Hamisnak kell lennie. |
<xs:complexContent>: content
Tartalom | Séma |
---|---|
restriction |
Tiltott, kivéve, ha base=""xs:anyType ". Ez utóbbi egyenértékű azzal, hogy a tartalmát xs:restriction közvetlenül a tároló alá helyezi.xs:complexContent |
extension |
Támogatott. Az adatszerződés öröklődésének leképezése. |
<xs:extension> in <xs:complexContent>: attributes
Attribútum | Séma |
---|---|
id |
Figyelmen kívül hagyja. |
base |
Támogatott. Megfelelteti azt az alapadat-szerződéstípust, amelytől ez a típus öröklődik. |
<xs:extension> in <xs:complexContent>: contents
A szabályok megegyeznek a tartalomra vonatkozó szabályokkal <xs:complexType>
.
<xs:sequence>
Ha egy meg van adva, a tagelemek a származtatott adatszerződésben szereplő további adattagokra lesznek leképezve.
Ha egy származtatott típus olyan elemet tartalmaz, amelynek neve megegyezik egy alaptípus elemével, a duplikált elemdeklaráció egy egyedi névvel rendelkező adattaghoz lesz leképezve. Pozitív egész számokat ad hozzá az adattag nevéhez ("member1", "member2" stb.), amíg egyedi nevet nem talál. Ezzel szemben:
Ha egy származtatott adatszerződés adattagja ugyanazzal a névvel és típussal rendelkezik, mint egy alapadat-szerződés adattagja,
DataContractSerializer
a származtatott típusban létrehozza ezt a megfelelő elemet.Ha egy származtatott adatszerződés adattagja ugyanazzal a névvel rendelkezik, mint egy alapadat-szerződésben szereplő adattag, de más típusú, akkor a
DataContractSerializer
séma egy olyan sémát importál, amely azxs:anyType
alaptípus és a származtatott típusú deklarációk egyik elemét is magában foglalta. Az eredeti típusnév megmarad a fájlbanxs:annotations/xs:appInfo/ser:ActualType/@Name
.
Mindkét változat egy nem egyértelmű tartalommodellel rendelkező sémához vezethet, amely a megfelelő adattagok sorrendjétől függ.
Típus/primitív leképezés
A DataContractSerializer
a következő leképezést használja az XML-séma primitív típusaihoz.
XSD-típus | .NET-típus |
---|---|
anyType |
Object. |
anySimpleType |
String. |
duration |
TimeSpan. |
dateTime |
DateTime. |
dateTimeOffset |
DateTime és TimeSpan az eltoláshoz. Lásd alább a DateTimeOffset szerializálást. |
time |
String. |
date |
String. |
gYearMonth |
String. |
gYear |
String. |
gMonthDay |
String. |
gDay |
String. |
gMonth |
String. |
boolean |
Boolean |
base64Binary |
Byte Tömb. |
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ípusok leképezése
Az .NET-keretrendszer 1.0-s ISerializable verziójában általános mechanizmusként vezették be az objektumok adatmegőrzésre vagy adatátvitelre való szerializálására. Számos .NET-keretrendszer típus implementálható ISerializable
és átadható az alkalmazások között. DataContractSerializer természetesen támogatást nyújt az osztályok számára ISerializable
. A DataContractSerializer
leképezések ISerializable
implementációs sématípusai csak a típus QName (minősített neve) szerint különböznek, és gyakorlatilag tulajdonsággyűjtemények. A névtérben például a DataContractSerializer
következő XSD-típus lesz leképezve 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>
Az Adatszerződés szerializálási sémájában deklarált opcionális attribútum ser:FactoryType
egy olyan gyári osztályra hivatkozik, amely deszerializálhatja a típust. A gyári osztálynak a használt példány ismert típusgyűjteményének DataContractSerializer
részét kell képeznie. Az ismert típusokkal kapcsolatos további információkért lásd: Adatszerződés ismert típusai.
DataContract szerializálási séma
Egy speciális adatszerződés szerializálási névteréből származó használati típusok, elemek és attribútumok által DataContractSerializer
exportált sémák száma:
http://schemas.microsoft.com/2003/10/Serialization
Az alábbiakban egy teljes adatszerződés szerializálási sémadeklarációja látható.
<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 következőket kell megjegyezni:
ser:char
A a következő típusú CharUnicode-karaktereket jelöli: .A
valuespace
értékexs:duration
egy rendezett készletre van csökkentve, hogy leképezhető legyen egy TimeSpanértékre.FactoryType
A a(z) típusból ISerializableexportált sémákban használatos.
Nem DataContract-sémák importálása
DataContractSerializer
lehetővé teszi olyan ImportXmlTypes
sémák importálását, amelyek nem felelnek meg az DataContractSerializer
XSD-profilnak (lásd a tulajdonságot Options ). Ha ezt a beállítást úgy állítja be, hogy true
lehetővé teszi a nem megfelelő sématípusok elfogadását, és megfelelteti őket a következő implementációnak, IXmlSerializable burkolja a tömböt XmlNode (csak az osztály neve különbözik).
[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 szerializálás
A DateTimeOffset nem primitív típusként van kezelve. Ehelyett két részből áll, összetett elemként szerializálva. Az első rész a dátumidőt, a második pedig a dátum időeltolódását jelöli. A szerializált DateTimeOffset értékre az alábbi kódban látható példa.
<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>
A séma a következő.
<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>