Delen via


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 DataContractSerializerfunctie 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; included 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; included 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:attributeGroupen xs:attribute. Deze declaraties worden genegeerd als onderliggende elementen, xs:schemamaar kunnen niet worden verwezen vanuit complexType of andere ondersteunde constructies.
attributeGroup Genegeerd. DataContractSerializer biedt geen ondersteuning voor het gebruik van xs:group, xs:attributeGroupen xs:attribute. Deze declaraties worden genegeerd als onderliggende elementen, xs:schemamaar 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:attributeGroupen xs:attribute. Deze declaraties worden genegeerd als onderliggende elementen, xs:schemamaar 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 Avan 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 het maxOccurs 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 het maxOccurs 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>)

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, , fixeden id formkenmerken 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 complexTypegebruikt, 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 dan xs: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 zoals xs: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 type xs:anyType in zowel basistype- als afgeleide typedeclaraties. De oorspronkelijke typenaam blijft behouden in xs: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 van xs: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>

Zie ook