データ コントラクト スキーマの参照Data Contract Schema Reference

ここでは、XML シリアル化用の共通言語ランタイム (CLR) 型を表すために DataContractSerializer が使用する XML スキーマ (XSD) のサブセットについて説明します。This topic describes the subset of the XML Schema (XSD) used by DataContractSerializer to describe common language runtime (CLR) types for XML serialization.

DataContractSerializer のマッピングDataContractSerializer Mappings

DataContractSerializer は、メタデータエンドポイントまたはServiceModel メタデータユーティリティツール (svcutil.exe)を使用して、WINDOWS COMMUNICATION FOUNDATION (WCF) サービスからメタデータをエクスポートするときに、CLR 型を XSD にマップします。The DataContractSerializer maps CLR types to XSD when metadata is exported from a Windows Communication Foundation (WCF) service using a metadata endpoint or the ServiceModel Metadata Utility Tool (Svcutil.exe). 詳細については、「データコントラクトシリアライザー」を参照してください。For more information, see Data Contract Serializer.

また、 DataContractSerializer は、Svcutil.exe を使用して Web サービス記述言語 (WSDL) や XSD ドキュメントにアクセスし、サービスまたはクライアントのデータ コントラクトを生成するときに、XSD を CLR 型にマッピングします。The DataContractSerializer also maps XSD to CLR types when Svcutil.exe is used to access Web Services Description Language (WSDL) or XSD documents and generate data contracts for services or clients.

DataContractSerializerを使用して CLR 型にマッピングできるのは、この文書に記載されている要件に適合する XML スキーマ インスタンスに限られます。Only XML Schema instances that conform to requirements stated in this document can be mapped to CLR types using DataContractSerializer.

サポート レベルSupport Levels

DataContractSerializer は、特定の XML スキーマ機能に次のサポート レベルを提供します。The DataContractSerializer provides the following levels of support for a given XML Schema feature:

  • サポートありSupported. この機能から CLR 型または属性の一方または両方への、 DataContractSerializerを使用する明示的なマッピングが存在します。There is explicit mapping from this feature to CLR types or attributes (or both) using DataContractSerializer.

  • 無視Ignored. この機能は、 DataContractSerializerによってインポートされたスキーマで使用できますが、コードの生成に影響しません。The feature is allowed in schemas imported by the DataContractSerializer, but has no effect on code generation.

  • 禁止Forbidden. DataContractSerializer は、この機能を使用するスキーマのインポートをサポートしません。The DataContractSerializer does not support importing a schema using the feature. たとえば、Svcutil.exe は、この機能を使用するスキーマに基づいて WSDL にアクセスする場合、代わりに XmlSerializer を使用します。For example, Svcutil.exe, when accessing a WSDL with a schema that uses such a feature, falls back to using the XmlSerializer instead. これが既定値です。This is by default.

一般情報General Information

  • スキーマ名前空間については、「 XML Schema (XML スキーマ)」を参照してください。The schema namespace is described at XML Schema. このドキュメントでは、プレフィックス "xs" を使用しています。The prefix "xs" is used in this document.

  • スキーマ以外の名前空間を含む属性は無視されます。Any attributes with a non-schema namespace are ignored.

  • 注釈 (このドキュメントで説明しているものを除きます) はすべて無視されます。Any annotations (except for those described in this document) are ignored.

<xs: schema >: attributes<xs:schema>: attributes

属性Attribute DataContractDataContract
attributeFormDefault 無視。Ignored.
blockDefault 無視。Ignored.
elementFormDefault 修飾する必要があります。Must be qualified. DataContractSerializerでスキーマをサポートするには、すべての要素を修飾する必要があります。All elements must be qualified for a schema to be supported by DataContractSerializer. これを行うには、xs:schema/@elementFormDefault を "qualified" に設定するか、個々の要素宣言で xs:element/@form を "qualified" に設定します。This can be accomplished by either setting xs:schema/@elementFormDefault to "qualified" or by setting xs:element/@form to "qualified" on each individual element declaration.
finalDefault 無視。Ignored.
Id 無視。Ignored.
targetNamespace サポートされます。データ コントラクト名前空間にマッピングされます。Supported and mapped to the data contract namespace. この属性を指定しなかった場合は、空の名前空間が使用されます。If this attribute is not specified, the blank namespace is used. 予約された名前空間をすることはできません http://schemas.microsoft.com/2003/10/Serialization/ です。Cannot be the reserved namespace http://schemas.microsoft.com/2003/10/Serialization/.
version 無視。Ignored.

<xs: schema >: コンテンツ<xs:schema>: contents

目次Contents SchemaSchema
include サポートあり。Supported. DataContractSerializer では xs:include と xs:import がサポートされています。DataContractSerializer supports xs:include and xs:import. ただし、メタデータをローカル ファイルから読み込む場合、Svcutil.exe では、後続の xs:include/@schemaLocation 参照と xs:import/@location 参照が制限されます。However, Svcutil.exe restricts following xs:include/@schemaLocation and xs:import/@location references when metadata is loaded from a local file. この場合、 include ではなく帯域外機構を通じてスキーマ ファイルの一覧を渡す必要があります。 includeされたスキーマ ドキュメントは無視されます。The list of schema files must be passed through an out-of-band mechanism and not through include in this case; included schema documents are ignored.
redefine 禁止。Forbidden. セキュリティ上の理由により、 xs:redefine では、 DataContractSerializer の使用が禁止されています。 x:redefine では、 schemaLocation を後続させる必要があります。The use of xs:redefine is forbidden by DataContractSerializer for security reasons: x:redefine requires schemaLocation to be followed. 状況によっては、DataContract を使用する Svcutil.exe では、 schemaLocationの使用が制限されます。In certain circumstances, Svcutil.exe using DataContract restricts use of schemaLocation.
import サポートあり。Supported. DataContractSerializer では、 xs:includexs:importがサポートされています。DataContractSerializer supports xs:include and xs:import. ただし、メタデータをローカル ファイルから読み込む場合、Svcutil.exe では、後続の xs:include/@schemaLocation 参照と xs:import/@location 参照が制限されます。However, Svcutil.exe restricts following xs:include/@schemaLocation and xs:import/@location references when metadata is loaded from a local file. この場合、 include ではなく帯域外機構を通じてスキーマ ファイルの一覧を渡す必要があります。 includeされたスキーマ ドキュメントは無視されます。The list of schema files must be passed through an out-of-band mechanism and not through include in this case; included schema documents are ignored.
simpleType サポートあり。Supported. xs:simpleType のセクションを参照してください。See the xs:simpleType section.
complexType サポートされます。データ コントラクトにマッピングされます。Supported, maps to data contracts. xs:complexType のセクションを参照してください。See the xs:complexType section.
group 無視。Ignored. DataContractSerializer では、 xs:groupxs:attributeGroup、および xs:attributeの使用はサポートされていません。DataContractSerializer does not support use of xs:group, xs:attributeGroup, and xs:attribute. これらの宣言は xs:schemaの子として無視され、 complexType やその他のサポートされている構文内から参照できません。These declarations are ignored as children of xs:schema, but cannot be referenced from within complexType or other supported constructs.
attributeGroup 無視。Ignored. DataContractSerializer では、 xs:groupxs:attributeGroup、および xs:attributeの使用はサポートされていません。DataContractSerializer does not support use of xs:group, xs:attributeGroup, and xs:attribute. これらの宣言は xs:schemaの子として無視され、 complexType やその他のサポートされている構文内から参照できません。These declarations are ignored as children of xs:schema, but cannot be referenced from within complexType or other supported constructs.
element サポートあり。Supported. グローバル要素宣言 (GED) を参照してください。See Global Element Declaration (GED).
attribute 無視。Ignored. DataContractSerializer では、 xs:groupxs:attributeGroup、および xs:attributeの使用はサポートされていません。DataContractSerializer does not support use of xs:group, xs:attributeGroup, and xs:attribute. これらの宣言は xs:schemaの子として無視され、 complexType やその他のサポートされている構文内から参照できません。These declarations are ignored as children of xs:schema, but cannot be referenced from within complexType or other supported constructs.
notation 無視。Ignored.

複合型– <xs: complexType >Complex Types – <xs:complexType>

一般情報General Information

各複合型 <xs: complexType >、データコントラクトにマップされます。Each complex type <xs:complexType> maps to a data contract.

<xs: complexType >: attributes<xs:complexType>: attributes

属性Attribute SchemaSchema
abstract false (既定) のみ有効です。Must be false (default).
block 禁止。Forbidden.
final 無視。Ignored.
id 無視。Ignored.
mixed false (既定) のみ有効です。Must be false (default).
name サポートされています。データ コントラクト名にマッピングされます。Supported and mapped to the data contract name. 名前にピリオドが含まれている場合は、内部型への型のマッピングが実行されます。If there are periods in the name, an attempt is made to map the type to an inner type. たとえば、 A.B という名前の複合型は、データ コントラクト名 Aを持つ型の内部型であるデータ コントラクト型にマッピングされますが、このようなデータ コントラクト型が存在する場合に限られます。For example, a complex type named A.B maps to a data contract type that is an inner type of a type with the data contract name A, but only if such a data contract type exists. 複数レベルの入れ子が可能です。たとえば、 A.B.C という内部型も可能ですが、これは、 AA.B の両方が存在する場合に限られます。More than one level of nesting is possible: for example, A.B.C can be an inner type, but only if A and A.B both exist.

<xs:complexType>: contents<xs:complexType>: contents

目次Contents SchemaSchema
simpleContent 拡張は禁止です。Extensions are forbidden.

制限は、 anySimpleTypeからのみ許可されます。Restriction is allowed only from anySimpleType.
complexContent サポートあり。Supported. 「継承」を参照してください。See "Inheritance".
group 禁止。Forbidden.
all 禁止。Forbidden.
choice 許可されていませんForbidden
sequence サポートされます。データ コントラクトのデータ メンバーにマッピングされます。Supported, maps to data members of a data contract.
attribute use="prohibited" の場合でも禁止です (ただし、例外が 1 つあります)。Forbidden, even if use="prohibited" (with one exception). 標準シリアル化スキーマ名前空間のオプションの属性のみがサポートされます。Only optional attributes from the Standard Serialization Schema namespace are supported. これらは、データ コントラクト プログラミング モデルのデータ メンバーにマッピングされません。They do not map to data members in the data contract programming model. 現在、これらの属性で意味のあるものは 1 つだけです。詳細については、ISerializable のセクションを参照してください。Currently, only one such attribute has meaning and is discussed in the ISerializable section. 他の属性はすべて無視されます。All others are ignored.
attributeGroup 禁止。Forbidden. WCF v1 リリースでは、DataContractSerializerxs:complexType内の attributeGroup の存在を無視します。In the WCF v1 release, DataContractSerializer ignores the presence of attributeGroup inside xs:complexType.
anyAttribute 禁止。Forbidden.
(空)(empty) データ メンバーを持たないデータ コントラクトにマッピングされます。Maps to a data contract with no data members.

<xs: sequence > 複合型: attributes<xs:sequence> in a complex type: attributes

属性Attribute SchemaSchema
id 無視。Ignored.
maxOccurs 1 (既定) のみ有効です。Must be 1 (default).
minOccurs 1 (既定) のみ有効です。Must be 1 (default).

<xs: sequence > 複合型: コンテンツ<xs:sequence> in a complex type: contents

目次Contents SchemaSchema
element 各インスタンスがデータ メンバーにマッピングされます。Each instance maps to a data member.
group 禁止。Forbidden.
choice 禁止。Forbidden.
sequence 禁止。Forbidden.
any 禁止。Forbidden.
(空)(empty) データ メンバーを持たないデータ コントラクトにマッピングされます。Maps to a data contract with no data members.

要素– <xs: element >Elements – <xs:element>

一般情報General Information

<xs:element> は、次の構文で発生します。<xs:element> can occur in the following contexts:

  • <xs:sequence>内で発生し、通常 (コレクション以外) のデータ コントラクトのデータ メンバーを表すことができます。It can occur within an <xs:sequence>, which describes a data member of a regular (non-collection) data contract. この場合、 maxOccurs 属性は 1 にする必要がありますIn this case, the maxOccurs attribute must be 1. (値 0 は使用できません)。(A value of 0 is not allowed).

  • <xs:sequence>内で発生し、コレクション データ コントラクトのデータ メンバーを表すことができます。It can occur within an <xs:sequence>, which describes a data member of a collection data contract. この場合、 maxOccurs 属性は 2 以上の値か、"unbounded" にする必要があります。In this case, the maxOccurs attribute must be greater than 1 or "unbounded".

  • <xs:schema> 内で GED (グローバル要素宣言) として発生します。It can occur within an <xs:schema> as a Global Element Declaration (GED).

<xs: sequence > (データメンバー) 内で maxOccurs = 1 を持つ xs: element > を <します。<xs:element> with maxOccurs=1 within an <xs:sequence> (Data Members)

属性Attribute SchemaSchema
ref 禁止。Forbidden.
name サポートされます。データ メンバー名にマッピングされます。Supported, maps to the data member name.
type サポートされます。データ メンバー型にマッピングされます。Supported, maps to the data member type. 詳細については、「型/プリミティブのマッピング」を参照してください。For more information, see Type/primitive mapping. 指定しない場合 (および要素に匿名型が含まれていない場合) は、 xs:anyType が使用されます。If not specified (and the element does not contain an anonymous type), xs:anyType is assumed.
block 無視。Ignored.
default 禁止。Forbidden.
fixed 禁止。Forbidden.
form 修飾する必要があります。Must be qualified. この属性は、 elementFormDefaultxs:schemaを通じて設定できます。This attribute can be set through elementFormDefault on xs:schema.
id 無視。Ignored.
maxOccurs 11
minOccurs データ メンバーの IsRequired プロパティにマッピングされます (IsRequired が 1 の場合、 minOccurs は true です)。Maps to the IsRequired property of a data member (IsRequired is true when minOccurs is 1).
nillable 型のマッピングに影響します。Affects type mapping. 「型/プリミティブのマッピング」を参照してください。See Type/primitive mapping.

<xs: sequence > (Collections) 内の maxOccurs > 1 で、xs: element > を <します。<xs:element> with maxOccurs>1 within an <xs:sequence> (Collections)

コレクションは次のいずれかになります。Collections can be of the following types:

  • 標準コレクション (配列など)。Regular collections (for example, arrays).

  • ディクショナリ コレクション (1 つの値を別の値にマッピングする、 Hashtableなど)。Dictionary collections (mapping one value to another; for example, a Hashtable).

  • ディクショナリとキー/値ペアの配列の種類との唯一の相違は、生成されるプログラミング モデルにあります。The only difference between a dictionary and an array of a key/value pair type is in the generated programming model. 特定の種類がディクショナリ コレクションであることを示すには、スキーマ注釈機構を使用できます。There is a schema annotation mechanism that can be used to indicate that a given type is a dictionary collection.

refblockdefaultfixedform、および id の各属性に対するルールは、コレクション以外の場合と同じです。The rules for the ref, block, default, fixed, form, and id attributes are the same as for the non-collection case. その他に、次の表に示す属性があります。Other attributes include those in the following table.

属性Attribute SchemaSchema
name サポートされます。 ItemName 属性の CollectionDataContractAttribute プロパティにマッピングされます。Supported, maps to the ItemName property in the CollectionDataContractAttribute attribute.
type サポートされます。コレクションに格納されている型にマッピングされます。Supported, maps to the type stored in the collection.
maxOccurs 2 以上または "unbounded"。Greater than 1 or "unbounded". DC スキーマでは、"unbounded" を使用する必要があります。The DC schema should use "unbounded".
minOccurs 無視。Ignored.
nillable 型のマッピングに影響します。Affects type mapping. この属性は、ディクショナリ コレクションでは無視されます。This attribute is ignored for dictionary collections.

xs: schema > グローバル要素宣言の <内で xs: element > を <<xs:element> within an <xs:schema> Global Element Declaration

  • スキーマ内の型と同じ名前および名前空間を持つか、それ自体の内部で匿名型を定義するグローバル要素宣言 (GED) は、型に関連付けられていると言います。A Global Element Declaration (GED) that has the same name and namespace as a type in schema, or that defines an anonymous type inside itself, is said to be associated with the type.

  • スキーマのエクスポート : 単純型と複合型の両方で、生成された型ごとに関連 GED が生成されます。Schema export: associated GEDs are generated for every generated type, both simple and complex.

  • 逆シリアル化/シリアル化 : 関連 GED が、該当する型のルート要素として使用されます。Deserialization/serialization: associated GEDs are used as root elements for the type.

  • スキーマのインポート : 次のルールに従う場合、関連 GED は不要となり無視されます (ただし、それが型を定義する場合を除きます)。Schema import: associated GEDs are not required and are ignored if they follow the following rules (unless they define types).

属性Attribute SchemaSchema
abstract 関連 GED では false のみ有効です。Must be false for associated GEDs.
block 関連 GED では禁止です。Forbidden in associated GEDs.
default 関連 GED では禁止です。Forbidden in associated GEDs.
final 関連 GED では false のみ有効です。Must be false for associated GEDs.
fixed 関連 GED では禁止です。Forbidden in associated GEDs.
id 無視。Ignored.
name サポートあり。Supported. 関連 GED の定義を参照してください。See the definition of associated GEDs.
nillable 関連 GED では true のみ有効です。Must be true for associated GEDs.
substitutionGroup 関連 GED では禁止です。Forbidden in associated GEDs.
type サポートされます。関連 GED に関連付けられた型に一致させる必要があります (ただし、要素に匿名型が含まれている場合を除きます)。Supported, and must match the associated type for associated GEDs (unless the element contains an anonymous type).

<xs: element >: contents<xs:element>: contents

目次Contents SchemaSchema
simpleType サポートされています。*Supported.*
complexType サポートされています。*Supported.*
unique 無視。Ignored.
key 無視。Ignored.
keyref 無視。Ignored.
(空白)(blank) サポートあり。Supported.

匿名型に対して simpleTypecomplexType, のマッピングを使用する場合は、匿名型のデータコントラクトが存在しない点を除き、匿名型の場合と同じように * します。これにより、名前付きデータコントラクトが作成され、要素名から派生した名前が生成されます。* When using the simpleType and complexType, mapping for anonymous types is the same as for non-anonymous types, except that there is no anonymous data contracts, and so a named data contract is created, with a generated name derived from the element name. 匿名型のルールは、次のとおりです。The rules for anonymous types are in the following list:

  • WCF 実装の詳細: xs:element 名にピリオドが含まれていない場合、匿名型は外部データコントラクト型の内部型にマップされます。WCF implementation detail: If the xs:element name does not contain periods, the anonymous type maps to an inner type of the outer data contract type. 名前にピリオドが含まれている場合、結果のデータ コントラクト型は、内部型ではなく、独立した型になります。If the name contains periods, the resulting data contract type is independent (not an inner type).

  • 内部型の生成されたデータ コントラクト名は、外部型のデータ コントラクト名の後にピリオド、要素の名前、および文字列 "Type" が付いたものになります。The generated data contract name of the inner type is the data contract name of the outer type followed by a period, the name of the element, and the string "Type".

  • そのような名前を持つデータ コントラクトが既に存在する場合は、"1"、"2"、"3" などの番号が付加されて一意の名前になります。If a data contract with such a name already exists, the name is made unique by appending "1", "2", "3", and so on until a unique name is created.

Simple Types - <xs:simpleType>Simple Types - <xs:simpleType>

<xs: simpleType >: attributes<xs:simpleType>: attributes

属性Attribute SchemaSchema
final 無視。Ignored.
id 無視。Ignored.
name サポートされます。データ コントラクト名にマッピングされます。Supported, maps to the data contract name.

<xs: simpleType >: contents<xs:simpleType>: contents

目次Contents SchemaSchema
restriction サポートあり。Supported. 列挙データ コントラクトにマッピングされます。Maps to enumeration data contracts. 列挙パターンに一致しない場合、この属性は無視されます。This attribute is ignored if it does not match the enumeration pattern. xs:simpleType の制限のセクションを参照してください。See the xs:simpleType restrictions section.
list サポートあり。Supported. フラグ列挙データ コントラクトにマッピングされます。Maps to flag enumeration data contracts. xs:simpleType の一覧のセクションを参照してください。See the xs:simpleType lists section.
union 禁止。Forbidden.

<xs:restriction><xs:restriction>

  • 複合型制限は、base="xs:anyType" の場合のみサポートされます。Complex type restrictions are supported only for base="xs:anyType".

  • xs:string 以外の制限ファセットを持たない xs:enumeration の単純型制限は、列挙データ コントラクトにマッピングされます。Simple type restrictions of xs:string that do not have any restriction facets other than xs:enumeration are mapped to enumeration data contracts.

  • その他すべての単純型制限は、それぞれが制限する型にマッピングされます。All other simple type restrictions are mapped to the types they restrict. たとえば、 xs:int の制限は、 xs:int 自体と同様に整数にマッピングされます。For example, a restriction of xs:int maps to an integer, just as xs:int itself does. プリミティブ型のマッピングの詳細については、「型/プリミティブのマッピング」を参照してください。For more information about primitive type mapping, see Type/primitive mapping.

<xs: restriction >: attributes<xs:restriction>: attributes

属性Attribute SchemaSchema
base サポートされている単純型または xs:anyTypeのみ有効です。Must be a supported simple type or xs:anyType.
id 無視。Ignored.

<xs: restriction > (その他すべての場合): 内容<xs:restriction> for all other cases: contents

目次Contents SchemaSchema
simpleType 存在する場合、サポートされているプリミティブ型から派生する必要があります。If present, must be derived from a supported primitive type.
minExclusive 無視。Ignored.
minInclusive 無視。Ignored.
maxExclusive 無視。Ignored.
maxInclusive 無視。Ignored.
totalDigits 無視。Ignored.
fractionDigits 無視。Ignored.
length 無視。Ignored.
minLength 無視。Ignored.
maxLength 無視。Ignored.
enumeration 無視。Ignored.
whiteSpace 無視。Ignored.
pattern 無視。Ignored.
(空白)(blank) サポートあり。Supported.

列挙体Enumeration

列挙型の xs: restriction > の <: 属性<xs:restriction> for enumerations: attributes

属性Attribute SchemaSchema
base 存在する場合、 xs:stringのみ有効です。If present, must be xs:string.
id 無視。Ignored.

列挙型の <xs: restriction >: 内容<xs:restriction> for enumerations: contents

目次Contents SchemaSchema
simpleType 存在する場合、データ コントラクトによってサポートされている列挙体制限 (このセクション) のみ有効です。If present, must be an enumeration restriction supported by the data contract (this section).
minExclusive 無視。Ignored.
minInclusive 無視。Ignored.
maxExclusive 無視。Ignored.
maxInclusive 無視。Ignored.
totalDigits 無視。Ignored.
fractionDigits 無視。Ignored.
length 禁止。Forbidden.
minLength 禁止。Forbidden.
maxLength 禁止。Forbidden.
enumeration サポートあり。Supported. 列挙体 "id" は無視され、"値" が列挙データ コントラクトの値の名前にマッピングされます。Enumeration "id" is ignored, and "value" maps to the value name in the enumeration data contract.
whiteSpace 禁止。Forbidden.
pattern 禁止。Forbidden.
(空)(empty) サポートされます。空の列挙型にマッピングされます。Supported, maps to empty enumeration type.

次のコードは、C# の列挙クラスを示しています。The following code shows a C# enumeration class.

public enum MyEnum
{
  first = 3,
  second = 4,
  third =5
}

このクラスは DataContractSerializerにより、次のスキーマにマッピングされます。This class maps to the following schema by the DataContractSerializer. 列挙値が 1 から始まる場合、 xs:annotation ブロックは生成されません。If enumeration values start from 1, xs:annotation blocks are not generated.

<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><xs:list>

DataContractSerializer は、 System.FlagsAttribute によってマークされた列挙型を、 xs:list から派生した xs:stringにマッピングします。DataContractSerializer maps enumeration types marked with System.FlagsAttribute to xs:list derived from xs:string. これ以外の xs:list のバリエーションはサポートされません。No other xs:list variations are supported.

<xs: list >: attributes<xs:list>: attributes

属性Attribute SchemaSchema
itemType 禁止。Forbidden.
id 無視。Ignored.

<xs: list >: contents<xs:list>: contents

目次Contents SchemaSchema
simpleType xs:string ファセットを使用する xs:enumeration からの制限のみ有効です。Must be restriction from xs:string using xs:enumeration facet.

列挙値が 2 の累乗の数列 (フラグの既定) に従わない場合、値は xs:annotation/xs:appInfo/ser:EnumerationValue 要素に格納されます。If enumeration value does not follow a power of 2 progression (default for Flags), the value is stored in the xs:annotation/xs:appInfo/ser:EnumerationValue element.

たとえば、次のコードは列挙型をフラグとして処理します。For example, the following code flags an enumeration type.

[Flags]
public enum AuthFlags
{
  AuthAnonymous = 1,
  AuthBasic = 2,
  AuthNTLM = 4,
  AuthMD5 = 16,
  AuthWindowsLiveID = 64,
}

この列挙型は次のスキーマにマッピングされます。This type maps to the following 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>

継承Inheritance

一般ルールGeneral rules

データ コントラクトは、別のデータ コントラクトを継承できます。A data contract can inherit from another data contract. このようなデータ コントラクトは base にマッピングされ、 <xs:extension> XML スキーマ コントラクトを使用する拡張型によって派生されます。Such data contracts map to a base and are derived by extension types using the <xs:extension> XML Schema construct.

データ コントラクトは、コレクション データ コントラクトを継承できません。A data contract cannot inherit from a collection data contract.

データ コントラクトの例を次のコードに示します。For example, the following code is a data contract.

[DataContract]
public class Person
{
  [DataMember]
  public string Name;
}
[DataContract]
public class Employee : Person
{
  [DataMember]
  public int ID;
}

このデータ コントラクトは次の XML スキーマ型の宣言にマッピングされます。This data contract maps to the following XML Schema type declaration.

<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 >: attributes<xs:complexContent>: attributes

属性Attribute SchemaSchema
id 無視。Ignored.
mixed false のみ有効です。Must be false.

<xs: complexContent >: コンテンツ<xs:complexContent>: contents

目次Contents SchemaSchema
restriction 禁止ですが、base="xs:anyType" の場合を除きます。Forbidden, except when base="xs:anyType". 後者は、 xs:restriction のコンテナーの下に xs:complexContentのコンテンツを直接配置するのと同じです。The latter is equivalent to placing the content of the xs:restriction directly under the container of the xs:complexContent.
extension サポートあり。Supported. データ コントラクトの継承にマッピングされます。Maps to data contract inheritance.

xs: complexContent >: 属性での xs: extension > <の <<xs:extension> in <xs:complexContent>: attributes

属性Attribute SchemaSchema
id 無視。Ignored.
base サポートあり。Supported. この型が継承する基本データ コントラクト型にマッピングされます。Maps to the base data contract type that this type inherits from.

xs: complexContent >: contents <の <xs: extension ><xs:extension> in <xs:complexContent>: contents

<xs:complexType> コンテンツと同じルールです。The rules are the same as for <xs:complexType> contents.

<xs:sequence> を指定した場合は、そのメンバー要素が、派生データ コントラクトに存在する追加のデータ メンバーにマッピングされます。If an <xs:sequence> is provided, its member elements map to additional data members that are present in the derived data contract.

基本型の要素と同じ名前を持つ要素が派生型に含まれている場合は、重複する要素宣言が、一意のものとして生成される名前を持つデータ メンバーにマッピングされます。If a derived type contains an element with the same name as an element in a base type, the duplicate element declaration maps to a data member with a name that is generated to be unique. データ メンバーの名前には、一意の名前が見つかるまで正の整数が付加されます ("member1"、"member2" など)。Positive integer numbers are added to the data member name ("member1", "member2", and so on) until a unique name is found. これに対して、次のようになります。Conversely:

  • 基本データ コントラクトのデータ メンバーと同じ名前および型を持つデータ メンバーが派生データ コントラクトに存在する場合、 DataContractSerializer は、これに対応する要素を派生型で生成します。If a derived data contract has a data member with the same name and type as a data member in a base data contract, DataContractSerializer generates this corresponding element in the derived type.

  • 基本データ コントラクトのデータ メンバーと名前は同じでも型が異なるデータ メンバーが派生データ コントラクトに存在する場合、 DataContractSerializer は、 xs:anyType 型の要素を含むスキーマを、基本型と派生型の両方の宣言にインポートします。If a derived data contract has a data member with the same name as a data member in a base data contract but a different type, the DataContractSerializer imports a schema with an element of the type xs:anyType in both base type and derived type declarations. 元の型名は、 xs:annotations/xs:appInfo/ser:ActualType/@Nameに保持されます。The original type name is preserved in xs:annotations/xs:appInfo/ser:ActualType/@Name.

それぞれのデータ メンバーの順序によっては、これら両方のバリエーションにより、あいまいなコンテンツ モデルを含むスキーマが生じる場合があります。Both variations may lead to a schema with an ambiguous content model, which depends on the order of the respective data members.

型/プリミティブのマッピングType/primitive mapping

DataContractSerializer は、XML スキーマのプリミティブ型で次のマッピングを使用します。The DataContractSerializer uses the following mapping for XML Schema primitive types.

XSD 型XSD type .NET 型.NET type
anyType Object.Object.
anySimpleType String.String.
duration TimeSpan.TimeSpan.
dateTime DateTime.DateTime.
dateTimeOffset オフセットのDateTime および TimeSpanDateTime and TimeSpan for the offset. 後の「DateTimeOffset のシリアル化」を参照してください。See DateTimeOffset Serialization below.
time String.String.
date String.String.
gYearMonth String.String.
gYear String.String.
gMonthDay String.String.
gDay String.String.
gMonth String.String.
boolean Boolean
base64Binary Byte 配列Byte array.
hexBinary String.String.
float Single.Single.
double Double.Double.
anyURI Uri.Uri.
QName XmlQualifiedName.XmlQualifiedName.
string String.String.
normalizedString String.String.
token String.String.
language String.String.
Name String.String.
NCName String.String.
ID String.String.
IDREF String.String.
IDREFS String.String.
ENTITY String.String.
ENTITIES String.String.
NMTOKEN String.String.
NMTOKENS String.String.
decimal Decimal.Decimal.
integer Int64.Int64.
nonPositiveInteger Int64.Int64.
negativeInteger Int64.Int64.
long Int64.Int64.
int Int32.Int32.
short Int16.Int16.
Byte SByte.SByte.
nonNegativeInteger Int64.Int64.
unsignedLong UInt64.UInt64.
unsignedInt UInt32.UInt32.
unsignedShort UInt16.UInt16.
unsignedByte Byte.Byte.
positiveInteger Int64.Int64.

ISerializable 型のマッピングISerializable types mapping

.NET Framework バージョン1.0 では、永続化またはデータ転送のためにオブジェクトをシリアル化するための一般的なメカニズムとして ISerializable が導入されました。In .NET Framework version 1.0, ISerializable was introduced as a general mechanism to serialize objects for persistence or data transfer. ISerializable を実装し、アプリケーション間で渡される .NET Framework 型は多数あります。There are many .NET Framework types that implement ISerializable and that can be passed between applications. DataContractSerializer は、当然ながら ISerializable クラスをサポートします。DataContractSerializer naturally provides support for ISerializable classes. DataContractSerializer は、型の QName (修飾名) のみが異なり、事実上プロパティ コレクションである ISerializable 実装スキーマ型をマッピングします。The DataContractSerializer maps ISerializable implementation schema types that differ only by the QName (qualified name) of the type and are effectively property collections. たとえば、DataContractSerializerマップExceptionで次の XSD 型を http://schemas.datacontract.org/2004/07/System 名前空間。For example, the DataContractSerializer maps Exception to the following XSD type in the http://schemas.datacontract.org/2004/07/System namespace.

<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>

データ コントラクトのシリアル化スキーマで宣言されたオプションの属性 ser:FactoryType は、型を逆シリアル化できるファクトリ クラスを参照します。The optional attribute ser:FactoryType declared in the Data Contract Serialization schema references a factory class that can deserialize the type. ファクトリ クラスは、使用する DataContractSerializer インスタンスの既知の型コレクションの一部である必要があります。The factory class must be part of the known types collection of the DataContractSerializer instance being used. 既知の型の詳細については、「データコントラクトの既知の型」を参照してください。For more information about known types, see Data Contract Known Types.

DataContract のシリアル化スキーマDataContract Serialization Schema

DataContractSerializer によってエクスポートされたいくつかのスキーマでは、次の特別なデータ コントラクト シリアル化名前空間の型、要素、および属性を使用します。A number of schemas exported by the DataContractSerializer use types, elements, and attributes from a special Data Contract Serialization namespace:

http://schemas.microsoft.com/2003/10/Serialization

データ コントラクト シリアル化スキーマの完全な宣言を次に示します。The following is a complete Data Contract Serialization schema declaration.

<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>

ここで次の点に注意します。The following should be noted:

  • ser:char を導入して、型 Charの Unicode 文字を表現します。ser:char is introduced to represent Unicode characters of type Char.

  • valuespacexs:duration を順序付きセットに縮小し、 TimeSpanにマッピングできるようにします。The valuespace of xs:duration is reduced to an ordered set so that it can be mapped to a TimeSpan.

  • FactoryType から派生した型からエクスポートされたスキーマで ISerializableを使用します。FactoryType is used in schemas exported from types that are derived from ISerializable.

非 DataContract スキーマのインポートImporting non-DataContract schemas

DataContractSerializer には、 ImportXmlTypes XSD プロファイルに準拠しないスキーマのインポートを可能にする DataContractSerializer オプションがあります (「 Options プロパティ」を参照してください)。DataContractSerializer has the ImportXmlTypes option to allow import of schemas that do not conform to the DataContractSerializer XSD profile (see the Options property). このオプションを true に設定すると、非準拠スキーマ型を受け入れ、それを次の実装 ( IXmlSerializable の配列をラップする XmlNode ) にマッピングできるようになります (クラス名のみ異なります)。Setting this option to true enables acceptance of non-conforming schema types and mapping them to the following implementation, IXmlSerializable wrapping an array of XmlNode (only the class name differs).

[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 のシリアル化DateTimeOffset Serialization

DateTimeOffset はプリミティブ型としては扱われません。The DateTimeOffset is not treated as a primitive type. その代わりに、2 つの部分から成る複合型要素としてシリアル化されます。Instead, it is serialized as a complex element with two parts. 最初の部分は日時を表し、2 番目の部分は日時からのオフセットを表します。The first part represents the date time, and the second part represents the offset from the date time. 次のコード例に、シリアル化された DateTimeOffset 値を示します。An example of a serialized DateTimeOffset value is shown in the following 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>

スキーマは次のとおりです。The schema is as follows.

<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>

関連項目See also