XmlReader.ReadContentAs(Type, IXmlNamespaceResolver) メソッド

定義

指定した型のオブジェクトとしてコンテンツを読み取ります。

public:
 virtual System::Object ^ ReadContentAs(Type ^ returnType, System::Xml::IXmlNamespaceResolver ^ namespaceResolver);
public virtual object ReadContentAs(Type returnType, System.Xml.IXmlNamespaceResolver namespaceResolver);
public virtual object ReadContentAs(Type returnType, System.Xml.IXmlNamespaceResolver? namespaceResolver);
abstract member ReadContentAs : Type * System.Xml.IXmlNamespaceResolver -> obj
override this.ReadContentAs : Type * System.Xml.IXmlNamespaceResolver -> obj
Public Overridable Function ReadContentAs (returnType As Type, namespaceResolver As IXmlNamespaceResolver) As Object

パラメーター

returnType
Type

返される値の型。

メモ .NET Framework 3.5 のリリースでは、 returnType パラメーターの値を DateTimeOffset 型にできるようになりました。

namespaceResolver
IXmlNamespaceResolver

型変換に関連するすべての名前空間プレフィックスを解決するために使用される IXmlNamespaceResolver オブジェクト。 たとえば、これは、 XmlQualifiedName オブジェクトを xs:stringに変換するときに使用できます。

この値は、null の場合もあります。

返品

要求された型に変換された連結されたテキスト コンテンツまたは属性値。

例外

コンテンツがターゲットの種類に対して正しい形式ではありません。

試行されたキャストが無効です。

returnType 値は nullです。

現在のノードは、サポートされているノード の種類ではありません。 詳細については、次の表を参照してください。

-又は-

前の非同期操作が完了する前に、 XmlReader メソッドが呼び出されました。 この場合、"非同期操作は既に進行中です" というメッセージで InvalidOperationException がスローされます。

Decimal.MaxValueを読み取る。

次の例では、 ReadContentAs メソッドを使用して、colors 要素の内容を文字列オブジェクトの配列に返します。

using (XmlReader reader = XmlReader.Create("dataFile_2.xml")) {
      reader.ReadToDescendant("item");

      reader.MoveToAttribute("colors");
      string[] colors = (string[]) reader.ReadContentAs(typeof(string[]),null);
      foreach (string color in colors) {
         Console.WriteLine("Colors: {0}", color);
      }             		
}
Using reader As XmlReader = XmlReader.Create("dataFile_2.xml")

  reader.ReadToDescendant("item")
              
  reader.MoveToAttribute("colors")
  Dim colors As String() = CType(reader.ReadContentAs(GetType(String()), Nothing), String())
  Dim color As String
  For Each color In  colors
    Console.WriteLine("Colors: {0}", color)
  Next color
          
End Using

この例では、 dataFile_2.xml ファイルを入力として使用します。

<root>
  <item sale-item='true' productID='123456' colors='blue green black'>
    <price>9.95</price>
  </item>
  <item sale-item='false' productID='124390'>
    <price>5.95</price>
  </item>
  <item sale-item='true' productID='53298'>
    <price>12.95</price>
  </item>
</root>

注釈

このメソッドは、現在のリーダー位置にあるテキスト コンテンツを読み取り、要求された戻り値の型に変換します。 テキスト、空白、重要な空白、および CDATA セクションが連結されます。 コメントと処理命令はスキップされ、エンティティ参照は自動的に解決されます。

このメソッドは、現在のノード コンテンツからアトミック値項目を読み取り、必要に応じて変換し、返すために使用されます。 入力の種類が現在のノードの型の有効なマッピングである場合は、現在のノードの値を含むターゲット型のインスタンスが返されます。 既定のマッピングの一覧については、 XmlReader リファレンス ページの「解説」セクションを参照してください。

たとえば、次の XML テキストがあるとします。

<elem>123 <!-- comment --> <?pi my_text?> 456 <?pi another_pi?></elem>

データが型指定され、文字列配列が ReadContentAs メソッド呼び出しに提供される場合、整数値は有効な CLR 型マッピングの一覧に従って文字列から変換されます。

データが型指定されておらず、 ReadContentAs メソッド呼び出しに文字列配列が指定されている場合、コンテンツは個別の文字列に解析されます。 2 つの文字列を含む配列は、値 "123" と "456" で返されます。 スペースはコンテンツから保持されません。

一般に、型指定されていないデータを読み取る場合、コンテンツは指定された型に従って解析されます。 たとえば、 ReadContentAs メソッドの呼び出しに整数配列が指定されている場合、文字列は {123,456}整数の配列に解析されます。

次の例では、XML テキストはスペースで区切りません

<elem>123<!-- comment --><?pi my_text?>456789<?pi another_pi?></elem>

コンテンツが型指定されておらず、文字列配列が ReadContentAs メソッド呼び出しに渡された場合、1 つの連結文字列を含む配列が値 "123456789" で返されます。

次の表では、このメソッドが各ノードの種類を処理する方法について説明します。

XmlNodeType 値を返す 閲覧者の動作
Text

CDATA

Whitespace

SignificantWhitespace

EntityReference

EndEntity
要求された型に変換されたテキスト、CDATA、空白、および重要な空白ノードの連結されたコンテンツ。 次の開始要素または終了要素タグに移動します。 エンティティ参照は自動的に展開されます。
Attribute 属性値に対する XmlConvert.ToXxx の呼び出しと同じです。 リーダーは現在の位置に残ります。
Comment

ProcessingInstruction
処理命令 (PI) またはコメントを無視し、PI またはコメントに続く連結テキスト コンテンツを読み取ります。 次の開始要素または終了要素タグに移動します。 エンティティ参照は自動的に展開されます。
EndElement 空の文字列。 リーダーは現在の位置に残ります。
Element

XmlDeclaration

None

Document

DocumentType

Notation

Entity

DocumentFragment
InvalidOperationExceptionがスローされます。 未定義ですが、通常、リーダーは現在の位置に残ります。

詳細については、 XmlReader リファレンス ページの「解説」セクションと W3C XML スキーマ パート 2: データ型に関する 推奨事項を参照してください。

このメソッドの非同期バージョンについては、 ReadContentAsAsyncを参照してください。

適用対象