シリアル化

シリアル化は、C データ構造 (構造体、配列、およびプリミティブ値) の値を XML 要素として書き込むプロセスです。 逆シリアル化は逆プロセスです。

シリアル化は、C データ構造 (構造体、配列、およびプリミティブ値) の値を XML 要素として書き込むプロセスです。 逆シリアル化は逆プロセスです。

どちらのプロセスも、C データ構造と XML の間のマッピングの説明に依存します。

シリアル化と逆シリアル化が、C データ構造と XML 間のマッピングの説明にどのように依存するかを示す図。

値をシリアル化するために、アプリケーションは WsWriteElementWsWriteAttribute 、または WsWriteType を呼び出します。

値を逆シリアル化するために、アプリケーションは WsReadElementWsReadAttribute 、または WsReadType を呼び出します。

セキュリティ

XML リーダー は、逆シリアル化プロセスで使用されます。 XML に関連するセキュリティ情報については、「XML リーダー」の「セキュリティ」セクションを参照してください。

逆シリアライザーは、逆シリアル化される要素の読み取りが完了するまでデータを逆シリアル化し続けます。 逆シリアル化処理は、逆シリアル化されるデータの説明に準拠していない XML ドキュメントが検出されると失敗します。 その時点で使用されている XML リーダーが無効になり、エラーが返されます。

既定では、逆シリアル化は厳密です。 逆シリアル化が失敗する一部の条件には、次のものが含まれますが、これらに限定されません。

  • 予期される要素がありません
  • 必要な要素間に予期しない要素フィールドが表示される
  • 必須フィールドの後の追加の要素の内容 (WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENTを除く)
  • WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES フラグが指定されていない限り、予期しない属性
  • 指定した範囲外の予期しないデータ型の値
  • 繰り返し要素の数が指定した範囲外である

大量のデータをシリアル化すると、過剰なメモリ割り当てが発生し、サービス拒否攻撃が発生する可能性があります。 データを逆シリアル化するユーザーは、データを割り当てる Heap オブジェクトを指定する必要があります。また、ユーザーはヒープ割り当て制限を使用してメモリ割り当て攻撃を防ぐことができます。

文字列の最大長、配列内の最大要素数など、データ型の範囲のサポート。を使用すると、ユーザーはさまざまなデータ型の最大サイズを制御できます。 ユーザーは、データの説明またはスキーマで範囲を指定して、異なるデータの最大サイズを制限できます。

埋め込みゼロを含む文字列値は、ワイヤ形式 (テキスト、バイナリ、MTOM) でサポートされています。 0 が埋め込まれた文字列を逆シリアル化する場合、ユーザーはカウントされた文字列 (WS_STRING) を使用する必要があります。そのため、0 は文字列の長さの計算を混乱させません。 埋め込みゼロを含む文字列値が、0 で終わる文字列を予期しているフィールドに逆シリアル化されると、エラーが返され、逆シリアル化は失敗します。 wsutil を使用してデータ記述を生成する場合は、0 が埋め込まれた文字列が必要な場合は、/string:WS_STRING オプションを使用する必要があります。

シリアル化では、次のコールバックが使用されます。

シリアル化では、次の列挙が使用されます。

シリアル化では、次の関数が使用されます。

シリアル化では、次の構造体が使用されます。