WriteObjectMarcが言うように、オーバーロードを使用する場合、Streamによってストリームに書き込まれるバイトは、渡されるインスタンスDataContractSerializerのタイプに関係なく、XMLドキュメントのUTF-8エンコードされたテキストを構成します。 Streama MemoryStream、最終的にはメモリ内のバイト配列になりますが(これはMemoryStreamであるため)、これらのバイトはUTF-8でエンコードされたXMLテキストで構成されます。これは通常はバイナリ表現として記述されません。
WriteObjectがかかるオーバーロードを使用する場合、XmlWriter最終的に何ができるかXmlWriterは、自分のタイプと、それがどのように初期化されているかによって完全に決まります。に関する限り、オブジェクトの状態を表すXMLインフォセットを記述するために、適切なパターンでDataContractSerializerのメソッドを呼び出します。XmlWriterそのインフォセットがどのようにエンコードされるかは、の実装によって異なりますXmlWriter。
特殊な要件があり、特にマゾヒスティックな場合は、独自のカスタムXmlWriterを実装して、任意の種類のエンコード、圧縮、暗号化を行うことができます。またはXmlTextWriter、を渡すこともできます。これにより、インフォセットのテキストエンコーディング(ストリームオーバーロードなど)が提供されますが、文字エンコーディングとテキストフォーマットを制御するためのオプションが増えます。通常は、を渡します。XmlDictionaryWriterその後、作成方法に応じて、エンコードにさまざまなオプションがあります。
これらのオプションには、XMLインフォセットのWCF独自のバイナリエンコーディングが含まれます。これを使用してインスタンスを作成しますXmlDictionaryWriter.CreateBinaryWriter。WCFチームは、WCFのパフォーマンス目標を達成するために、効率的なバイナリ表現の設計に多大な労力を費やしたため、結果が確実に得られるという条件で、より良いオプションを考え出すのは難しいと思います。シリアル化されたオブジェクトは、.NETコードによってのみ逆シリアル化する必要があります。公開標準ベースのバイナリ表現が必要な場合は、代わりにのMTOMフレーバーを検討してくださいXmlDictionaryWriter。