2016-04-27 12 views
1

私はXmlTextWriterを使って誰かを見つけたときにXmlSerializerを使っていました。XmlTextWriterとXmlSerializerの違いは?

これら2つの違いは何ですか?

私にとっては、XMLファイルを作成するのと同じ機能を果たします。マイクロソフトのウェブサイトによると、XmlTextWriterはストリームを生成する高速でキャッシュされていない転送のみの方法を提供していますが、その意味がわかりません。

+1

XmlSerializerは、オブジェクトをxmlにシリアル化する方法を知っています。 XmlTextWriterは、xmlをストリームまたはファイルに書き込む方法を知っています。 2つの明確で無関係の操作。 –

答えて

3

XmlTextWriterクラスは、XMLを認識するオブジェクトです。これを使用して任意のXML文書を生成することができます。データがどこから来ているかは関係ありません。 XML要素、属性、およびコンテンツのデータを、XML文書の実際の構造とともに、適切なソースから取得できます。また、特定のオブジェクトの構造やデータに一致する必要はありません。

一方、XmlSerializerは、型を認識するオブジェクトです。タイプを分析し、重要な情報を抽出し、その情報を書き出すために必要な機能を備えています。実際にI/Oを実行するには、XmlTextWriterオブジェクトを使用できます。独自のものを提供することも、あるレベルでは、実際のI/Oを処理するための類似のオブジェクトを常に作成することもできます。言い換えれば、シリアライザオブジェクトは実際にはXML自体を実際には知っておらず、必要もありません。その作業を別のオブジェクトに委譲します。

MicrosoftのWebサイトではXmlTextWriterはストリームを生成する、高速、非キャッシュ、前方のみの方法を提供しますが、私は本当にそれが何を意味するのか分からないと言いました。

  • 「速い」:遅くない
  • 「非キャッシュ」:あなたがの部分を再訪することはできません。重要な情報が
  • は「前進のみ」
  • 絶対に必要以上に長くメモリに格納されていません既に作成したXML文書

これは、文書構造全体が構築された状態でメモリに保持され、文書全体が一度しかファイルに書き込まれないXML文書を生成する他の方法とは対照的です共同でnstructed。これはしばしば「ドキュメントオブジェクトモデル」すなわちDOMと呼ばれます。

ライターのアプローチは、XMLデータが必要に応じて、すでに持っている他のメモリ内データ構造から直接生成されるため、パフォーマンスが向上する傾向があります。 DOMのアプローチでは、ファイル全体のデータと構造を一度にメモリに表現する必要があるため、通常はより多くのメモリを使用しますが、場合によってはパフォーマンスを低下させる可能性があります(現代のコンピュータや一般的なXML文書では、完全な非発行)。

+0

だから、XmlTextWriterを使ってxmlファイルを生成するとします。転送のみなので、xmlファイルをテキストボックスに読み込んで値を書き直すことはできません。 – user2521723

+0

_ "転送のみなので、xmlファイルをテキストボックスに読み込んで値を書き直すことはできませんか?" - はいといいえ。例えば、XMLを使用していつでもXMLをリロードすることができます。 'XmlTextReader'。値を書き換えることもできますが、ファイル全体を一度に書き直す必要があります。実際には、ファイルからオブジェクトを逆シリアル化し、そのオブジェクトの値をテキストボックスに表示し、そのオブジェクトを再度ファイルにシリアル化すると、これはXmlSerializerによって行われます。'XmlSerializer'がオブジェクトレベルで動作するので、基本的なXML実装の詳細について心配する必要はありません。 –

+0

これを正しく理解すると、XmlSerializerを使用すると特定のノードの値を上書きすることができますが、XmlTextWriterを使用すると特定の値を上書きすることはできませんが、単一の値を変更しますか? – user2521723

関連する問題