Naslaginformatie over gegevenscontractschema's
In dit onderwerp wordt de subset beschreven van het XML-schema (XSD) dat wordt gebruikt voor DataContractSerializer het beschrijven van CLR-typen (Common Language Runtime) voor XML-serialisatie.
DataContractSerializer-toewijzingen
De DataContractSerializer
CLR-typen worden toegewezen aan XSD wanneer metagegevens worden geëxporteerd vanuit een WCF-service (Windows Communication Foundation) met behulp van een metagegevenseindpunt of het Hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe). Zie Serializer voor gegevenscontract voor meer informatie.
Ook DataContractSerializer
worden XSD-typen toegewezen aan CLR-typen wanneer Svcutil.exe wordt gebruikt voor toegang tot WSDL-documenten (Web Services Description Language) of XSD-documenten en gegevenscontracten genereren voor services of clients.
Alleen XML-schema-exemplaren die voldoen aan de vereisten die in dit document worden vermeld, kunnen worden toegewezen aan CLR-typen met behulp van DataContractSerializer
.
Ondersteuningsniveaus
De DataContractSerializer
functie biedt de volgende ondersteuningsniveaus voor een bepaalde XML-schemafunctie:
Ondersteund. Er is expliciete toewijzing van deze functie aan CLR-typen of -kenmerken (of beide) met behulp van
DataContractSerializer
.Genegeerd. De functie is toegestaan in schema's die door de
DataContractSerializer
functie zijn geïmporteerd, maar heeft geen invloed op het genereren van code.Verboden. Het
DataContractSerializer
importeren van een schema met behulp van de functie wordt niet ondersteund. Svcutil.exe bijvoorbeeld bij het openen van een WSDL met een schema dat gebruikmaakt van een dergelijke functie, terug naar het gebruik van de XmlSerializer functie. Dit is standaard.
Algemene gegevens
De schemanaamruimte wordt beschreven in het XML-schema. Het voorvoegsel 'xs' wordt in dit document gebruikt.
Alle kenmerken met een niet-schemanaamruimte worden genegeerd.
Aantekeningen (met uitzondering van aantekeningen die in dit document worden beschreven) worden genegeerd.
<xs:schema>: kenmerken
Kenmerk | DataContract |
---|---|
attributeFormDefault |
Genegeerd. |
blockDefault |
Genegeerd. |
elementFormDefault |
Moet worden gekwalificeerd. Alle elementen moeten worden gekwalificeerd om een schema te kunnen ondersteunen.DataContractSerializer Dit kan worden bereikt door xs:schema/@elementFormDefault in te stellen op 'qualified' of door xs:element/@form in te stellen op 'qualified' voor elke afzonderlijke elementdeclaratie. |
finalDefault |
Genegeerd. |
Id |
Genegeerd. |
targetNamespace |
Ondersteund en toegewezen aan de naamruimte van het gegevenscontract. Als dit kenmerk niet is opgegeven, wordt de lege naamruimte gebruikt. Kan de gereserveerde naamruimte http://schemas.microsoft.com/2003/10/Serialization/ niet zijn. |
version |
Genegeerd. |
<xs:schema>: inhoud
Inhoud | Schema |
---|---|
include |
Ondersteund. DataContractSerializer ondersteunt xs:include en xs:import. Svcutil.exe beperkt echter de volgende xs:include/@schemaLocation en xs:import/@location verwijzingen wanneer metagegevens vanuit een lokaal bestand worden geladen. De lijst met schemabestanden moet worden doorgegeven via een out-of-band-mechanisme en niet via include in dit geval; include d schemadocumenten worden genegeerd. |
redefine |
Verboden. Het gebruik van xs:redefine is om veiligheidsredenen verboden DataContractSerializer : x:redefine moet schemaLocation worden gevolgd. In bepaalde omstandigheden beperkt Svcutil.exe het gebruik van DataContract het gebruik van schemaLocation . |
import |
Ondersteund. DataContractSerializer ondersteunt xs:include en xs:import . Svcutil.exe beperkt echter de volgende xs:include/@schemaLocation en xs:import/@location verwijzingen wanneer metagegevens vanuit een lokaal bestand worden geladen. De lijst met schemabestanden moet worden doorgegeven via een out-of-band-mechanisme en niet via include in dit geval; include d schemadocumenten worden genegeerd. |
simpleType |
Ondersteund. Zie de xs:simpleType sectie. |
complexType |
Ondersteund, wordt toegewezen aan gegevenscontracten. Zie de xs:complexType sectie. |
group |
Genegeerd. DataContractSerializer biedt geen ondersteuning voor het gebruik van xs:group , xs:attributeGroup en xs:attribute . Deze declaraties worden genegeerd als onderliggende elementen, xs:schema maar kunnen niet worden verwezen vanuit complexType of andere ondersteunde constructies. |
attributeGroup |
Genegeerd. DataContractSerializer biedt geen ondersteuning voor het gebruik van xs:group , xs:attributeGroup en xs:attribute . Deze declaraties worden genegeerd als onderliggende elementen, xs:schema maar kunnen niet worden verwezen vanuit complexType of andere ondersteunde constructies. |
element |
Ondersteund. Zie Global Element Declaration (GED). |
attribute |
Genegeerd. DataContractSerializer biedt geen ondersteuning voor het gebruik van xs:group , xs:attributeGroup en xs:attribute . Deze declaraties worden genegeerd als onderliggende elementen, xs:schema maar kunnen niet worden verwezen vanuit complexType of andere ondersteunde constructies. |
notation |
Genegeerd. |
Complexe typen – <xs:complexType>
Algemene gegevens
Elk complex type <xs:complexType> wordt toegewezen aan een gegevenscontract.
<xs:complexType>: kenmerken
Kenmerk | Schema |
---|---|
abstract |
Moet onwaar zijn (standaard). |
block |
Verboden. |
final |
Genegeerd. |
id |
Genegeerd. |
mixed |
Moet onwaar zijn (standaard). |
name |
Ondersteund en toegewezen aan de naam van het gegevenscontract. Als er punten in de naam staan, wordt geprobeerd het type toe te wijzen aan een binnenste type. Een complex type met de naam wordt A.B bijvoorbeeld toegewezen aan een gegevenscontracttype dat een inner type is van een type met de naam A van het gegevenscontract, maar alleen als een dergelijk gegevenscontracttype bestaat. Er is meer dan één nestniveau mogelijk: dit kan bijvoorbeeld A.B.C een innerlijk type zijn, maar alleen als A en A.B beide bestaan. |
<xs:complexType>: inhoud
Inhoud | Schema |
---|---|
simpleContent |
Extensies zijn verboden. Beperking is alleen toegestaan vanaf anySimpleType . |
complexContent |
Ondersteund. Zie Overname. |
group |
Verboden. |
all |
Verboden. |
choice |
Verboden |
sequence |
Ondersteund, wordt toegewezen aan gegevensleden van een gegevenscontract. |
attribute |
Verboden, zelfs als use="verboden" (met één uitzondering). Alleen optionele kenmerken van de standaardserialisatieschemanaamruimte worden ondersteund. Ze worden niet toegewezen aan gegevensleden in het programmeermodel van het gegevenscontract. Op dit moment heeft slechts één dergelijk kenmerk betekenis en wordt besproken in de sectie ISerializable. Alle anderen worden genegeerd. |
attributeGroup |
Verboden. In de WCF v1-release DataContractSerializer negeert u de aanwezigheid van attributeGroup binnen xs:complexType . |
anyAttribute |
Verboden. |
(leeg) | Wordt toegewezen aan een gegevenscontract zonder gegevensleden. |
<xs:sequence> in een complex type: kenmerken
Kenmerk | Schema |
---|---|
id |
Genegeerd. |
maxOccurs |
Moet 1 zijn (standaard). |
minOccurs |
Moet 1 zijn (standaard). |
<xs:sequence> in een complex type: inhoud
Inhoud | Schema |
---|---|
element |
Elk exemplaar wordt toegewezen aan een gegevenslid. |
group |
Verboden. |
choice |
Verboden. |
sequence |
Verboden. |
any |
Verboden. |
(leeg) | Wordt toegewezen aan een gegevenscontract zonder gegevensleden. |
Elementen – <xs:element>
Algemene gegevens
<xs:element>
kan optreden in de volgende contexten:
Dit kan gebeuren binnen een
<xs:sequence>
, waarin een gegevenslid van een normaal (niet-verzameling) gegevenscontract wordt beschreven. In dit geval moet hetmaxOccurs
kenmerk 1 zijn. (Een waarde van 0 is niet toegestaan).Dit kan gebeuren binnen een
<xs:sequence>
, waarin een gegevenslid van een verzamelingsgegevenscontract wordt beschreven. In dit geval moet hetmaxOccurs
kenmerk groter zijn dan 1 of 'niet-afhankelijk'.Deze kan optreden binnen een
<xs:schema>
als een Global Element Declaration (GED).
<xs:element> met maxOccurs=1 binnen een <xs:sequence> (gegevensleden)
Kenmerk | Schema |
---|---|
ref |
Verboden. |
name |
Ondersteund, wordt toegewezen aan de naam van het gegevenslid. |
type |
Ondersteund, wordt toegewezen aan het gegevenslidtype. Zie Type/primitieve toewijzing voor meer informatie. Als dit niet is opgegeven (en het element geen anoniem type bevat), xs:anyType wordt ervan uitgegaan. |
block |
Genegeerd. |
default |
Verboden. |
fixed |
Verboden. |
form |
Moet worden gekwalificeerd. Dit kenmerk kan worden ingesteld op elementFormDefault xs:schema . |
id |
Genegeerd. |
maxOccurs |
1 |
minOccurs |
Wordt toegewezen aan de IsRequired eigenschap van een gegevenslid (IsRequired is waar wanneer minOccurs is 1). |
nillable |
Beïnvloedt de typetoewijzing. Zie Type/primitieve toewijzing. |
<xs:element> met maxOccurs 1 binnen een <xs:sequence> (verzamelingen>)
Wordt toegewezen aan een CollectionDataContractAttribute.
In verzamelingstypen is slechts één xs:element toegestaan binnen een xs:sequence.
Verzamelingen kunnen van de volgende typen zijn:
Reguliere verzamelingen (bijvoorbeeld matrices).
Woordenlijstverzamelingen (één waarde toewijzen aan een andere, bijvoorbeeld een Hashtable).
Het enige verschil tussen een woordenlijst en een matrix van een sleutel-waardepaartype is in het gegenereerde programmeermodel. Er is een mechanisme voor schemaaantekening dat kan worden gebruikt om aan te geven dat een bepaald type een woordenlijstverzameling is.
De regels voor de ref
, block
, , default
, , fixed
en id
form
kenmerken zijn hetzelfde als voor de niet-verzamelingscase. Andere kenmerken bevatten die in de volgende tabel.
Kenmerk | Schema |
---|---|
name |
Wordt ondersteund, wordt toegewezen aan de ItemName eigenschap in het CollectionDataContractAttribute kenmerk. |
type |
Ondersteund, wordt toegewezen aan het type dat is opgeslagen in de verzameling. |
maxOccurs |
Groter dan 1 of 'niet-gebonden'. Het DC-schema moet 'niet-afhankelijk' gebruiken. |
minOccurs |
Genegeerd. |
nillable |
Beïnvloedt de typetoewijzing. Dit kenmerk wordt genegeerd voor woordenlijstverzamelingen. |
<xs:element binnen een declaratie van het <algemene element> xs:schema>
Een Global Element Declaration (GED) met dezelfde naam en naamruimte als een type in het schema, of die een anoniem type binnen zichzelf definieert, wordt gezegd dat deze is gekoppeld aan het type.
Schemaexport: gekoppelde GED's worden gegenereerd voor elk gegenereerd type, zowel eenvoudig als complex.
Deserialisatie/serialisatie: gekoppelde GED's worden gebruikt als hoofdelementen voor het type.
Schema importeren: gekoppelde GED's zijn niet vereist en worden genegeerd als ze de volgende regels volgen (tenzij ze typen definiëren).
Kenmerk | Schema |
---|---|
abstract |
Moet onwaar zijn voor gekoppelde GED's. |
block |
Verboden in gekoppelde GED's. |
default |
Verboden in gekoppelde GED's. |
final |
Moet onwaar zijn voor gekoppelde GED's. |
fixed |
Verboden in gekoppelde GED's. |
id |
Genegeerd. |
name |
Ondersteund. Zie de definitie van gekoppelde GED's. |
nillable |
Moet waar zijn voor gekoppelde GED's. |
substitutionGroup |
Verboden in gekoppelde GED's. |
type |
Ondersteund en moet overeenkomen met het bijbehorende type voor gekoppelde GED's (tenzij het element een anoniem type bevat). |
<xs:element>: inhoud
Inhoud | Schema |
---|---|
simpleType |
Ondersteund.* |
complexType |
Ondersteund.* |
unique |
Genegeerd. |
key |
Genegeerd. |
keyref |
Genegeerd. |
(leeg) | Ondersteund. |
* Wanneer u de simpleType
en complexType
gebruikt, is de toewijzing voor anonieme typen hetzelfde als voor niet-anonieme typen, behalve dat er geen anonieme gegevenscontracten zijn en er dus een benoemd gegevenscontract wordt gemaakt, met een gegenereerde naam die is afgeleid van de elementnaam. De regels voor anonieme typen staan in de volgende lijst:
Details van WCF-implementatie: als de
xs:element
naam geen perioden bevat, wordt het anonieme type toegewezen aan een binnenste type van het externe gegevenscontracttype. Als de naam perioden bevat, is het resulterende gegevenscontracttype onafhankelijk (geen inner type).De naam van het gegenereerde gegevenscontract van het binnenste type is de naam van het gegevenscontract van het buitenste type, gevolgd door een punt, de naam van het element en de tekenreeks 'Type'.
Als er al een gegevenscontract met een dergelijke naam bestaat, wordt de naam uniek gemaakt door '1', '2', '3' enzovoort toe te voegen totdat er een unieke naam wordt gemaakt.
Eenvoudige typen - <xs:simpleType>
<xs:simpleType>: kenmerken
Kenmerk | Schema |
---|---|
final |
Genegeerd. |
id |
Genegeerd. |
name |
Ondersteund, wordt toegewezen aan de naam van het gegevenscontract. |
<xs:simpleType>: inhoud
Inhoud | Schema |
---|---|
restriction |
Ondersteund. Wordt toegewezen aan inventarisatiegegevenscontracten. Dit kenmerk wordt genegeerd als het niet overeenkomt met het opsommingspatroon. Zie de xs:simpleType sectie Beperkingen. |
list |
Ondersteund. Wordt toegewezen om opsommingsgegevenscontracten te markeren. Zie de xs:simpleType sectie Lijsten. |
union |
Verboden. |
<xs:restriction>
Complexe typebeperkingen worden alleen ondersteund voor base="
xs:anyType
.Eenvoudige typebeperkingen
xs:string
die geen andere beperkings facets hebben danxs:enumeration
die zijn toegewezen aan opsommingsgegevenscontracten.Alle andere eenvoudige typebeperkingen worden toegewezen aan de typen die ze beperken. Bijvoorbeeld een beperking van
xs:int
toewijzingen aan een geheel getal, net zoalsxs:int
zichzelf. Zie Type/primitieve toewijzing voor meer informatie over primitieve typetoewijzing.
<xs:restriction>: kenmerken
Kenmerk | Schema |
---|---|
base |
Moet een ondersteund eenvoudig type of xs:anyType . |
id |
Genegeerd. |
<xs:restriction> for all other cases: contents
Inhoud | Schema |
---|---|
simpleType |
Indien aanwezig, moet worden afgeleid van een ondersteund primitief type. |
minExclusive |
Genegeerd. |
minInclusive |
Genegeerd. |
maxExclusive |
Genegeerd. |
maxInclusive |
Genegeerd. |
totalDigits |
Genegeerd. |
fractionDigits |
Genegeerd. |
length |
Genegeerd. |
minLength |
Genegeerd. |
maxLength |
Genegeerd. |
enumeration |
Genegeerd. |
whiteSpace |
Genegeerd. |
pattern |
Genegeerd. |
(leeg) | Ondersteund. |
Inventarisatie
<xs:restriction> for enumerations: attributes
Kenmerk | Schema |
---|---|
base |
Indien aanwezig, moet dit zijn xs:string . |
id |
Genegeerd. |
<xs:restriction> for enumerations: contents
Inhoud | Schema |
---|---|
simpleType |
Indien aanwezig moet dit een opsommingsbeperking zijn die wordt ondersteund door het gegevenscontract (deze sectie). |
minExclusive |
Genegeerd. |
minInclusive |
Genegeerd. |
maxExclusive |
Genegeerd. |
maxInclusive |
Genegeerd. |
totalDigits |
Genegeerd. |
fractionDigits |
Genegeerd. |
length |
Verboden. |
minLength |
Verboden. |
maxLength |
Verboden. |
enumeration |
Ondersteund. Opsomming 'id' wordt genegeerd en 'waarde' wordt toegewezen aan de waardenaam in het opsommingsgegevenscontract. |
whiteSpace |
Verboden. |
pattern |
Verboden. |
(leeg) | Ondersteund, wordt toegewezen aan een leeg opsommingstype. |
De volgende code toont een C#-opsommingsklasse.
public enum MyEnum
{
first = 3,
second = 4,
third =5
}
Deze klasse wordt toegewezen aan het volgende schema door de DataContractSerializer
. Als opsommingswaarden beginnen vanaf 1, xs:annotation
worden er geen blokken gegenereerd.
<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
wijst opsommingstypen toe die zijn gemarkeerd met System.FlagsAttribute
om te xs:list
zijn afgeleid van xs:string
. Er worden geen andere xs:list
variaties ondersteund.
<xs:list>: kenmerken
Kenmerk | Schema |
---|---|
itemType |
Verboden. |
id |
Genegeerd. |
<xs:list>: inhoud
Inhoud | Schema |
---|---|
simpleType |
Moet een beperking zijn voor het gebruik van xs:string xs:enumeration facet. |
Als de opsommingswaarde geen macht van 2 voortgang volgt (standaard voor vlaggen), wordt de waarde opgeslagen in het xs:annotation/xs:appInfo/ser:EnumerationValue
element.
Met de volgende code wordt bijvoorbeeld een opsommingstype gemarkeerd.
[Flags]
public enum AuthFlags
{
AuthAnonymous = 1,
AuthBasic = 2,
AuthNTLM = 4,
AuthMD5 = 16,
AuthWindowsLiveID = 64,
}
Dit type wordt toegewezen aan het volgende schema.
<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>
Overname
Algemene regels
Een gegevenscontract kan overnemen van een ander gegevenscontract. Dergelijke gegevenscontracten worden toegewezen aan een basis en worden afgeleid door extensietypen met behulp van de <xs:extension>
XML-schemaconstructie.
Een gegevenscontract kan niet worden overgenomen van een gegevenscontract voor verzamelingen.
De volgende code is bijvoorbeeld een gegevenscontract.
[DataContract]
public class Person
{
[DataMember]
public string Name;
}
[DataContract]
public class Employee : Person
{
[DataMember]
public int ID;
}
Dit gegevenscontract wordt toegewezen aan de volgende declaratie van het XML-schematype.
<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>: kenmerken
Kenmerk | Schema |
---|---|
id |
Genegeerd. |
mixed |
Moet onwaar zijn. |
<xs:complexContent>: inhoud
Inhoud | Schema |
---|---|
restriction |
Verboden, behalve wanneer basis="xs:anyType ". Het laatste komt overeen met het plaatsen van de inhoud van de xs:restriction inhoud direct onder de container van de xs:complexContent . |
extension |
Ondersteund. Wordt toegewezen aan overname van gegevenscontracten. |
<xs:extension> in <xs:complexContent>: attributes
Kenmerk | Schema |
---|---|
id |
Genegeerd. |
base |
Ondersteund. Wordt toegewezen aan het type basisgegevenscontract waaruit dit type wordt overgenomen. |
<xs:extension> in <xs:complexContent>: content
De regels zijn hetzelfde als voor <xs:complexType>
inhoud.
Als er een <xs:sequence>
wordt opgegeven, worden de bijbehorende lidelementen toegewezen aan extra gegevensleden die aanwezig zijn in het afgeleide gegevenscontract.
Als een afgeleid type een element bevat met dezelfde naam als een element in een basistype, wordt de declaratie van dubbele elementen toegewezen aan een gegevenslid met een naam die wordt gegenereerd om uniek te zijn. Positieve gehele getallen worden toegevoegd aan de naam van het gegevenslid ('member1', 'member2', enzovoort) totdat een unieke naam wordt gevonden. Omgekeerd:
Als een afgeleid gegevenscontract een gegevenslid met dezelfde naam en type heeft als een gegevenslid in een basisgegevenscontract,
DataContractSerializer
genereert u dit bijbehorende element in het afgeleide type.Als een afgeleid gegevenscontract een gegevenslid heeft met dezelfde naam als een gegevenslid in een basisgegevenscontract, maar een ander type, importeert het
DataContractSerializer
een schema met een element van het typexs:anyType
in zowel basistype- als afgeleide typedeclaraties. De oorspronkelijke typenaam blijft behouden inxs:annotations/xs:appInfo/ser:ActualType/@Name
.
Beide variaties kunnen leiden tot een schema met een dubbelzinnige con tentmodus l, die afhankelijk is van de volgorde van de respectieve gegevensleden.
Type/primitieve toewijzing
Hierbij DataContractSerializer
wordt gebruikgemaakt van de volgende toewijzing voor primitieve typen XML-schema's.
XSD-type | .NET-type |
---|---|
anyType |
Object. |
anySimpleType |
String. |
duration |
TimeSpan. |
dateTime |
DateTime. |
dateTimeOffset |
DateTime en TimeSpan voor de offset. Zie DateTimeOffset Serialization hieronder. |
time |
String. |
date |
String. |
gYearMonth |
String. |
gYear |
String. |
gMonthDay |
String. |
gDay |
String. |
gMonth |
String. |
boolean |
Boolean |
base64Binary |
Byte array. |
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. |
Toewijzing van ISerializable-typen
In .NET Framework versie 1.0 werd ISerializable geïntroduceerd als een algemeen mechanisme voor het serialiseren van objecten voor persistentie of gegevensoverdracht. Er zijn veel .NET Framework-typen die worden geïmplementeerd ISerializable
en die kunnen worden doorgegeven tussen toepassingen. DataContractSerializer biedt natuurlijk ondersteuning voor ISerializable
klassen. ISerializable
De DataContractSerializer
implementatieschematypen die alleen verschillen per QName (gekwalificeerde naam) van het type en zijn effectief eigenschapsverzamelingen. Het wordt bijvoorbeeld DataContractSerializer
toegewezen Exception aan het volgende XSD-type in de http://schemas.datacontract.org/2004/07/System
naamruimte.
<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>
Het optionele kenmerk ser:FactoryType
dat is gedeclareerd in het serialisatieschema van het gegevenscontract verwijst naar een fabrieksklasse die het type kan deserialiseren. De fabrieksklasse moet deel uitmaken van de verzameling bekende typen van het DataContractSerializer
exemplaar dat wordt gebruikt. Zie Bekende typen gegevenscontract voor meer informatie over bekende typen.
Serialisatieschema van DataContract
Een aantal schema's die worden geëxporteerd door de DataContractSerializer
gebruikstypen, elementen en kenmerken uit een speciale naamruimte voor serialisatie van gegevenscontracten:
http://schemas.microsoft.com/2003/10/Serialization
Hier volgt een volledige declaratie van het datacontract serialisatieschema.
<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>
Het volgende moet worden genoteerd:
ser:char
wordt geïntroduceerd om Unicode-tekens van het type Charte vertegenwoordigen.De
valuespace
vanxs:duration
wordt gereduceerd tot een geordende set, zodat deze kan worden toegewezen aan een TimeSpan.FactoryType
wordt gebruikt in schema's die zijn geëxporteerd uit typen die zijn afgeleid van ISerializable.
Niet-DataContract-schema's importeren
DataContractSerializer
heeft de ImportXmlTypes
optie om het importeren van schema's toe te staan die niet voldoen aan het DataContractSerializer
XSD-profiel (zie de Options eigenschap). Als u deze optie instelt om true
acceptatie van niet-conforme schematypen mogelijk te maken en deze toe te voegen aan de volgende implementatie, IXmlSerializable verpakt u een matrix van XmlNode (alleen de klassenaam verschilt).
[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;
}
}
Serialisatie van DateTimeOffset
Het DateTimeOffset wordt niet behandeld als een primitief type. In plaats daarvan wordt het geserialiseerd als een complex element met twee delen. Het eerste deel vertegenwoordigt de datum/tijd en het tweede deel vertegenwoordigt de offset van de datumtijd. Een voorbeeld van een geserialiseerde DateTimeOffset-waarde wordt weergegeven in de volgende code.
<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>
Het schema is als volgt.
<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>