Schemareferens för datakontrakt
Det här avsnittet beskriver delmängden av XML-schema (XSD) som används av DataContractSerializer för att beskriva CLR-typer (Common Language Runtime) för XML-serialisering.
DataContractSerializer-mappningar
CLR-typerna DataContractSerializer
mappas till XSD när metadata exporteras från en WCF-tjänst (Windows Communication Foundation) med hjälp av en metadataslutpunkt eller Verktyget för ServiceModel-metadata (Svcutil.exe). Mer information finns i Data Contract Serializer.
Mappar DataContractSerializer
även XSD till CLR-typer när Svcutil.exe används för att komma åt WSDL-dokument (Web Services Description Language) eller XSD-dokument och generera datakontrakt för tjänster eller klienter.
Endast XML-schemainstanser som uppfyller kraven i det här dokumentet kan mappas till CLR-typer med hjälp av DataContractSerializer
.
Supportnivåer
Ger DataContractSerializer
följande stödnivåer för en viss XML-schemafunktion:
Stöds. Det finns explicit mappning från den här funktionen till CLR-typer eller attribut (eller båda) med hjälp av
DataContractSerializer
.Ignorerad. Funktionen tillåts i scheman som importeras av
DataContractSerializer
, men har ingen effekt på kodgenereringen.Förbjudet.
DataContractSerializer
Stöder inte import av ett schema med hjälp av funktionen. Till exempel Svcutil.exe, när du kommer åt en WSDL med ett schema som använder en sådan funktion, återgår till att använda XmlSerializer i stället. Detta är som standard.
Allmän information
Schemanamnområdet beskrivs i XML-schema. Prefixet "xs" används i det här dokumentet.
Alla attribut med ett namnområde som inte är schema ignoreras.
Eventuella anteckningar (förutom de som beskrivs i det här dokumentet) ignoreras.
<xs:schema>: attribut
Attribut | DataContract |
---|---|
attributeFormDefault |
Ignoreras. |
blockDefault |
Ignoreras. |
elementFormDefault |
Måste vara kvalificerad. Alla element måste vara kvalificerade för att ett schema ska kunna stödjas av DataContractSerializer . Detta kan åstadkommas genom att antingen ange xs:schema/@elementFormDefault till "kvalificerad" eller genom att ange xs:element/@form till "kvalificerad" för varje enskild elementdeklaration. |
finalDefault |
Ignoreras. |
Id |
Ignoreras. |
targetNamespace |
Stöds och mappas till datakontraktets namnområde. Om det här attributet inte har angetts används det tomma namnområdet. Det går inte att vara det reserverade namnområdet http://schemas.microsoft.com/2003/10/Serialization/ . |
version |
Ignoreras. |
<xs:schema>: innehåll
Innehåll | Schema |
---|---|
include |
Stöds. DataContractSerializer stöder xs:include och xs:import. Men Svcutil.exe begränsar följande xs:include/@schemaLocation och xs:import/@location referenser när metadata läses in från en lokal fil. Listan över schemafiler måste skickas via en out-of-band-mekanism och inte genom include i det här fallet. include d Schemadokument ignoreras. |
redefine |
Förbjuden. Användning av xs:redefine är förbjuden av säkerhetsskäl DataContractSerializer : x:redefine kräver schemaLocation att följas. Under vissa omständigheter begränsar Svcutil.exe användning av DataContract användningen av schemaLocation . |
import |
Stöds. DataContractSerializer stöder xs:include och xs:import . Men Svcutil.exe begränsar följande xs:include/@schemaLocation och xs:import/@location referenser när metadata läses in från en lokal fil. Listan över schemafiler måste skickas via en out-of-band-mekanism och inte genom include i det här fallet. include d Schemadokument ignoreras. |
simpleType |
Stöds. Se avsnittet xs:simpleType . |
complexType |
Stöd för mappning till datakontrakt. Se avsnittet xs:complexType . |
group |
Ignoreras. DataContractSerializer stöder inte användning av xs:group , xs:attributeGroup och xs:attribute . Dessa deklarationer ignoreras som underordnade xs:schema till , men kan inte refereras inifrån complexType eller andra konstruktioner som stöds. |
attributeGroup |
Ignoreras. DataContractSerializer stöder inte användning av xs:group , xs:attributeGroup och xs:attribute . Dessa deklarationer ignoreras som underordnade xs:schema till , men kan inte refereras inifrån complexType eller andra konstruktioner som stöds. |
element |
Stöds. Se Global elementdeklaration (GED). |
attribute |
Ignoreras. DataContractSerializer stöder inte användning av xs:group , xs:attributeGroup och xs:attribute . Dessa deklarationer ignoreras som underordnade xs:schema till , men kan inte refereras inifrån complexType eller andra konstruktioner som stöds. |
notation |
Ignoreras. |
Komplexa typer – <xs:complexType>
Allmän information
Varje komplex typ <xs:complexType> mappar till ett datakontrakt.
<xs:complexType>: attribut
Attribut | Schema |
---|---|
abstract |
Måste vara falskt (standard). |
block |
Förbjuden. |
final |
Ignoreras. |
id |
Ignoreras. |
mixed |
Måste vara falskt (standard). |
name |
Stöds och mappas till datakontraktets namn. Om det finns punkter i namnet görs ett försök att mappa typen till en inre typ. En komplex typ med namnet A.B mappar till en datakontraktstyp som är en inre typ av typ med namnet A på datakontraktet , men bara om det finns en sådan datakontraktstyp. Mer än en kapslingsnivå är möjlig: till exempel A.B.C kan vara en inre typ, men bara om A och A.B båda finns. |
<xs:complexType>: innehåll
Innehåll | Schema |
---|---|
simpleContent |
Tillägg är förbjudna. Begränsning tillåts endast från anySimpleType . |
complexContent |
Stöds. Se "Arv". |
group |
Förbjuden. |
all |
Förbjuden. |
choice |
Förbjudet |
sequence |
Stöd för mappning till datamedlemmar i ett datakontrakt. |
attribute |
Förbjudet, även om use="forbidden" (med ett undantag). Endast valfria attribut från namnområdet Standard serialiseringsschema stöds. De mappar inte till datamedlemmar i programmeringsmodellen för datakontrakt. För närvarande har endast ett sådant attribut betydelse och beskrivs i avsnittet ISerializable. Alla andra ignoreras. |
attributeGroup |
Förbjuden. I WCF v1-versionen DataContractSerializer ignorerar förekomsten av attributeGroup inuti xs:complexType . |
anyAttribute |
Förbjuden. |
(tom) | Mappar till ett datakontrakt utan datamedlemmar. |
<xs:sequence> i en komplex typ: attribut
Attribut | Schema |
---|---|
id |
Ignoreras. |
maxOccurs |
Måste vara 1 (standard). |
minOccurs |
Måste vara 1 (standard). |
<xs:sequence> i en komplex typ: innehåll
Innehåll | Schema |
---|---|
element |
Varje instans mappar till en datamedlem. |
group |
Förbjuden. |
choice |
Förbjuden. |
sequence |
Förbjuden. |
any |
Förbjuden. |
(tom) | Mappar till ett datakontrakt utan datamedlemmar. |
Element – <xs:element>
Allmän information
<xs:element>
kan inträffa i följande kontexter:
Det kan inträffa inom ett
<xs:sequence>
, som beskriver en datamedlem i ett vanligt (icke-samling) datakontrakt. I det här fallet måste attributetmaxOccurs
vara 1. (Värdet 0 är inte tillåtet).Det kan inträffa inom en
<xs:sequence>
, som beskriver en datamedlem i ett samlingsdatakontrakt. I det här falletmaxOccurs
måste attributet vara större än 1 eller "obundet".Det kan inträffa i en
<xs:schema>
som en global elementdeklaration (GED).
<xs:element> med maxOccurs=1 i en <xs:sequence> (datamedlemmar)
Attribut | Schema |
---|---|
ref |
Förbjuden. |
name |
Stödd mappas till datamedlemsnamnet. |
type |
Stöd för mappar till datamedlemstypen. Mer information finns i Typ/primitiv mappning. Om det inte anges (och elementet inte innehåller någon anonym typ) xs:anyType antas det. |
block |
Ignoreras. |
default |
Förbjuden. |
fixed |
Förbjuden. |
form |
Måste vara kvalificerad. Det här attributet kan anges via elementFormDefault på xs:schema . |
id |
Ignoreras. |
maxOccurs |
1 |
minOccurs |
Mappar till egenskapen för IsRequired en datamedlem (IsRequired är sant när minOccurs är 1). |
nillable |
Påverkar typmappning. Se Typ/primitiv mappning. |
<xs:element> med maxOccurs>1 i en <xs:sequence> (samlingar)
Mappar till en CollectionDataContractAttribute.
I samlingstyper tillåts endast ett xs:element i en xs:sekvens.
Samlingar kan vara av följande typer:
Vanliga samlingar (till exempel matriser).
Ordlistesamlingar (mappa ett värde till ett annat, till exempel en Hashtable).
Den enda skillnaden mellan en ordlista och en matris av nyckel/värde-partyp finns i den genererade programmeringsmodellen. Det finns en mekanism för schemaanteckning som kan användas för att indikera att en viss typ är en ordlistesamling.
Reglerna för attributen ref
, block
, default
, fixed
, form
och id
är desamma som för icke-samlingsfallet. Andra attribut inkluderar dem i följande tabell.
Attribut | Schema |
---|---|
name |
Stödd mappas till egenskapen ItemName i attributet CollectionDataContractAttribute . |
type |
Stöd för mappar till den typ som lagras i samlingen. |
maxOccurs |
Större än 1 eller "obundna". DC-schemat bör använda "obundna". |
minOccurs |
Ignoreras. |
nillable |
Påverkar typmappning. Det här attributet ignoreras för ordlistesamlingar. |
<xs:element> i en <global elementdeklaration för xs:schema>
En global elementdeklaration (GED) som har samma namn och namnområde som en typ i schemat, eller som definierar en anonym typ i sig, sägs vara associerad med typen.
Schemaexport: associerade GED:er genereras för varje genererad typ, både enkel och komplex.
Deserialisering/serialisering: associerade GED:er används som rotelement för typen.
Schemaimport: associerade GED:er krävs inte och ignoreras om de följer följande regler (om de inte definierar typer).
Attribut | Schema |
---|---|
abstract |
Måste vara falskt för associerade GED:er. |
block |
Förbjudet i associerade GED:er. |
default |
Förbjudet i associerade GED:er. |
final |
Måste vara falskt för associerade GED:er. |
fixed |
Förbjudet i associerade GED:er. |
id |
Ignoreras. |
name |
Stöds. Se definitionen av associerade GED:er. |
nillable |
Måste vara sant för associerade GED:er. |
substitutionGroup |
Förbjudet i associerade GED:er. |
type |
Stöds och måste matcha den associerade typen för associerade GED :ar (såvida inte elementet innehåller en anonym typ). |
<xs:element>: innehåll
Innehåll | Schema |
---|---|
simpleType |
Stödd.* |
complexType |
Stödd.* |
unique |
Ignoreras. |
key |
Ignoreras. |
keyref |
Ignoreras. |
(tom) | Stöds. |
* När du använder simpleType
och complexType
är mappningen för anonyma typer densamma som för icke-anonyma typer, förutom att det inte finns några anonyma datakontrakt, och därför skapas ett namngivet datakontrakt med ett genererat namn som härleds från elementnamnet. Reglerna för anonyma typer finns i följande lista:
Information om WCF-implementering: Om
xs:element
namnet inte innehåller perioder mappar den anonyma typen till en inre typ av den yttre datakontraktstypen. Om namnet innehåller perioder är den resulterande datakontraktstypen oberoende (inte en inre typ).Det genererade datakontraktsnamnet för den inre typen är namnet på datakontraktet för den yttre typen följt av en period, namnet på elementet och strängen "Typ".
Om det redan finns ett datakontrakt med ett sådant namn blir namnet unikt genom att lägga till "1", "2", "3" och så vidare tills ett unikt namn har skapats.
Enkla typer – <xs:simpleType>
<xs:simpleType>: attribut
Attribut | Schema |
---|---|
final |
Ignoreras. |
id |
Ignoreras. |
name |
Stöd för mappning till datakontraktets namn. |
<xs:simpleType>: innehåll
Innehåll | Schema |
---|---|
restriction |
Stöds. Mappar till uppräkningsdatakontrakt. Det här attributet ignoreras om det inte matchar uppräkningsmönstret. Se avsnittet xs:simpleType begränsningar. |
list |
Stöds. Mappar för att flagga uppräkningsdatakontrakt. Se listavsnittet xs:simpleType . |
union |
Förbjuden. |
<xs:restriction>
Komplexa typbegränsningar stöds endast för base="
xs:anyType
".Enkla typbegränsningar för
xs:string
som inte har några andra begränsningsfasetter änxs:enumeration
mappas till uppräkningsdatakontrakt.Alla andra enkla typbegränsningar mappas till de typer som de begränsar. Till exempel en begränsning av
xs:int
kartor till ett heltal, precis somxs:int
det gör. Mer information om primitiv typmappning finns i Typ/primitiv mappning.
<xs:restriction>: attribut
Attribut | Schema |
---|---|
base |
Måste vara en enkel typ som stöds eller xs:anyType . |
id |
Ignoreras. |
<xs:restriction> för alla andra fall: innehåll
Innehåll | Schema |
---|---|
simpleType |
Om det finns måste härledas från en primitiv typ som stöds. |
minExclusive |
Ignoreras. |
minInclusive |
Ignoreras. |
maxExclusive |
Ignoreras. |
maxInclusive |
Ignoreras. |
totalDigits |
Ignoreras. |
fractionDigits |
Ignoreras. |
length |
Ignoreras. |
minLength |
Ignoreras. |
maxLength |
Ignoreras. |
enumeration |
Ignoreras. |
whiteSpace |
Ignoreras. |
pattern |
Ignoreras. |
(tom) | Stöds. |
Uppräkning
<xs:restriction> for enumerations: attributes
Attribut | Schema |
---|---|
base |
Om det finns måste vara xs:string . |
id |
Ignoreras. |
<xs:restriction> for enumerations: contents
Innehåll | Schema |
---|---|
simpleType |
Om det finns måste vara en uppräkningsbegränsning som stöds av datakontraktet (det här avsnittet). |
minExclusive |
Ignoreras. |
minInclusive |
Ignoreras. |
maxExclusive |
Ignoreras. |
maxInclusive |
Ignoreras. |
totalDigits |
Ignoreras. |
fractionDigits |
Ignoreras. |
length |
Förbjuden. |
minLength |
Förbjuden. |
maxLength |
Förbjuden. |
enumeration |
Stöds. Uppräknings-ID ignoreras och "värde" mappas till värdenamnet i uppräkningsdatakontraktet. |
whiteSpace |
Förbjuden. |
pattern |
Förbjuden. |
(tom) | Stöd för mappning till tom uppräkningstyp. |
Följande kod visar en C#-uppräkningsklass.
public enum MyEnum
{
first = 3,
second = 4,
third =5
}
Den här klassen mappas till följande schema med DataContractSerializer
. Om uppräkningsvärdena börjar från 1 xs:annotation
genereras inte block.
<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
mappar uppräkningstyper som markerats med System.FlagsAttribute
till xs:list
härledda från xs:string
. Inga andra xs:list
varianter stöds.
<xs:list>: attribut
Attribut | Schema |
---|---|
itemType |
Förbjuden. |
id |
Ignoreras. |
<xs:list>: innehåll
Innehåll | Schema |
---|---|
simpleType |
Måste begränsas från xs:string att använda xs:enumeration fasetter. |
Om uppräkningsvärdet inte följer en effekt på 2 progression (standard för Flaggor) lagras värdet i elementet xs:annotation/xs:appInfo/ser:EnumerationValue
.
Följande kod flaggar till exempel en uppräkningstyp.
[Flags]
public enum AuthFlags
{
AuthAnonymous = 1,
AuthBasic = 2,
AuthNTLM = 4,
AuthMD5 = 16,
AuthWindowsLiveID = 64,
}
Den här typen mappar till följande 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>
Arv
Allmänna regler
Ett datakontrakt kan ärva från ett annat datakontrakt. Sådana datakontrakt mappas till en bas och härleds av tilläggstyper med hjälp av XML-schemakonstruktionen <xs:extension>
.
Ett datakontrakt kan inte ärva från ett samlingsdatakontrakt.
Följande kod är till exempel ett datakontrakt.
[DataContract]
public class Person
{
[DataMember]
public string Name;
}
[DataContract]
public class Employee : Person
{
[DataMember]
public int ID;
}
Det här datakontraktet mappar till följande XML-schematypdeklaration.
<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>: attribut
Attribut | Schema |
---|---|
id |
Ignoreras. |
mixed |
Måste vara falskt. |
<xs:complexContent>: innehåll
Innehåll | Schema |
---|---|
restriction |
Förbjudet, förutom när base="xs:anyType ". Det senare motsvarar att placera innehållet xs:restriction i direkt under containern i xs:complexContent . |
extension |
Stöds. Mappar till arv av datakontrakt. |
<xs:extension> i <xs:complexContent>: attribut
Attribut | Schema |
---|---|
id |
Ignoreras. |
base |
Stöds. Mappar till den basdatakontraktstyp som den här typen ärver från. |
<xs:extension> in <xs:complexContent>: contents
Reglerna är desamma som för <xs:complexType>
innehållet.
Om en <xs:sequence>
tillhandahålls mappas dess medlemselement till ytterligare datamedlemmar som finns i det härledda datakontraktet.
Om en härledd typ innehåller ett element med samma namn som ett element i en bastyp mappar den duplicerade elementdeklarationen till en datamedlem med ett namn som genereras för att vara unikt. Positiva heltalsnummer läggs till i datamedlemsnamnet ("member1", "member2" och så vidare) tills ett unikt namn hittas. Omvänt:
Om ett härlett datakontrakt har en datamedlem med samma namn och typ som en datamedlem i ett basdatakontrakt
DataContractSerializer
genererar motsvarande element i den härledda typen.Om ett härlett datakontrakt har en datamedlem med samma namn som en datamedlem i ett basdatakontrakt men en annan typ importeras
DataContractSerializer
ett schema med ett element av typenxs:anyType
i både bastyps- och härledda typdeklarationer. Det ursprungliga typnamnet bevaras ixs:annotations/xs:appInfo/ser:ActualType/@Name
.
Båda varianterna kan leda till ett schema med en tvetydig con tältläge l, som beror på ordningen för respektive datamedlemmar.
Typ-/primitiv mappning
DataContractSerializer
Använder följande mappning för primitiva XML-schematyper.
XSD-typ | .NET-typ |
---|---|
anyType |
Object. |
anySimpleType |
String. |
duration |
TimeSpan. |
dateTime |
DateTime. |
dateTimeOffset |
DateTime och TimeSpan för förskjutningen. Se DateTimeOffset Serialisering nedan. |
time |
String. |
date |
String. |
gYearMonth |
String. |
gYear |
String. |
gMonthDay |
String. |
gDay |
String. |
gMonth |
String. |
boolean |
Boolean |
base64Binary |
Byte samling. |
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. |
Mappning av ISerializable-typer
I .NET Framework version 1.0 ISerializable introducerades som en allmän mekanism för att serialisera objekt för beständighet eller dataöverföring. Det finns många .NET Framework-typer som implementerar ISerializable
och som kan skickas mellan program. DataContractSerializer ger naturligtvis stöd för ISerializable
klasser. Schematyperna DataContractSerializer
mappar ISerializable
implementeringsscheman som endast skiljer sig åt med QName (kvalificerat namn) av typen och som i praktiken är egenskapssamlingar. Mappas DataContractSerializer
Exception till exempel till följande XSD-typ i http://schemas.datacontract.org/2004/07/System
namnområdet.
<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>
Det valfria attributet ser:FactoryType
som deklareras i datakontrakts serialiseringsschemat refererar till en fabriksklass som kan deserialisera typen. Fabriksklassen måste vara en del av den kända typsamlingen för den DataContractSerializer
instans som används. Mer information om kända typer finns i Kända typer av datakontrakt.
DataContract-serialiseringsschema
Ett antal scheman som exporteras av användningstyper DataContractSerializer
, element och attribut från ett särskilt namnområde för datakontraktsserialisering:
http://schemas.microsoft.com/2003/10/Serialization
Följande är en fullständig schemadeklaration för datakontraktsserierering.
<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>
Följande bör noteras:
ser:char
introduceras för att representera Unicode-tecken av typen Char.Av
valuespace
xs:duration
reduceras till en ordnad uppsättning så att den kan mappas till en TimeSpan.FactoryType
används i scheman som exporteras från typer som härleds från ISerializable.
Importerar icke-DataContract-scheman
DataContractSerializer
ImportXmlTypes
har alternativet att tillåta import av scheman som inte överensstämmer med DataContractSerializer
XSD-profilen (se egenskapenOptions). Om du anger det här alternativet kan true
du godkänna icke-överensstämmande schematyper och mappa dem till följande implementering, IXmlSerializable omsluta en matris XmlNode med (endast klassnamnet skiljer sig åt).
[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-serialisering
DateTimeOffset Behandlas inte som en primitiv typ. I stället serialiseras det som ett komplext element med två delar. Den första delen representerar datumtiden och den andra delen representerar förskjutningen från datumtiden. Ett exempel på ett serialiserat DateTimeOffset-värde visas i följande kod.
<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>
Schemat är följande.
<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>