Megosztás a következőn keresztül:


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 DataContractSerializersé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 DataContractSerializera 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 schemaLocationhasználatát.
import Támogatott. DataContractSerializer támogatja xs:include a és xs:importa 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. DataContractSerializernem támogatja a , xs:attributeGroupés xs:attributea xs:grouphaszná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. DataContractSerializernem támogatja a , xs:attributeGroupés xs:attributea xs:grouphaszná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. DataContractSerializernem támogatja a , xs:attributeGroupés xs:attributea xs:grouphaszná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 Arendelkező 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 anySimpleTypeengedé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 attributeGroupxs: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 az maxOccurs 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 az maxOccurs 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 (IsRequiredigaz, 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)

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 refmegegyeznek 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, mint xs: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 , ahogyan xs: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:anyTypetí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:listxs: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 az xs: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ájlban xs: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éke xs: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>

Lásd még