次の方法で共有


連載

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

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

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

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

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

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

安全

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

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

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

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

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

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

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

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

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

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

  • WsReadAttribute
  • WsReadElement
  • WsReadType
  • WsWriteAttribute
  • WsWriteElement
  • WsWriteType

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