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