Поделиться через


XmlReader.ReadContentAs Method

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Reads the content as an object of the type specified.

Namespace:  System.Xml
Assembly:  System.Xml (in System.Xml.dll)

Syntax

'Declaration
Public Overridable Function ReadContentAs ( _
    returnType As Type, _
    namespaceResolver As IXmlNamespaceResolver _
) As Object
public virtual Object ReadContentAs(
    Type returnType,
    IXmlNamespaceResolver namespaceResolver
)

Parameters

  • returnType
    Type: System.Type
    The type of the value to be returned.
    Note    With the release of the .NET Framework 3.5, the value of the returnType parameter can now be the DateTimeOffset type.

Return Value

Type: System.Object
The concatenated text content or attribute value converted to the requested type.

Exceptions

Exception Condition
FormatException

The content is not in the correct format for the target type.

InvalidCastException

The attempted cast is not valid.

ArgumentNullException

The returnType value is nulla null reference (Nothing in Visual Basic).

InvalidOperationException

The current node is not a supported node type. See the table below for details.

OverflowException

Read Decimal.MaxValue.

Remarks

This method reads the text content at the current reader position and converts it to the requested return type. Text, white space, significant white space and CDATA sections are concatenated. Comments and processing instructions are skipped and entity references are automatically resolved.

This method is used to read, convert if necessary, and return atomic value items from the current node content. If the input type is a valid mapping for the type of the current node then an instance of the target type containing the value of the current node is returned. For a list of the default mappings, see Mapping XML Data Types to CLR Types in the .NET Framework documentation.

For example, if you had the following XML text:

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

If the data is typed and a string array is supplied to the ReadContentAs method call, then the integer values are converted from strings according to the list of valid CLR type mappings.

If the data is untyped and a string array is supplied to the ReadContentAs method call, then the content is parsed into separate strings. An array containing two strings is returned with the values "123" and "456". The spaces are not preserved from the content.

In general when reading untyped data the content is parsed according to the supplied type. For example, if an integer array is supplied to the ReadContentAs method call then the string is parsed into an array of integers {123,456}.

In the following example the XML text is not separated by spaces

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

If the content is untyped and a string array is supplied to the ReadContentAs method call then an array containing one concatenated string is returned with the value "123456789".

The following table describes how this method treats each node type.

XmlNodeType

Return value

Reader behavior

Text

CDATA

Whitespace

SignificantWhitespace

EntityReference

EndEntity

Concatenated content of text, CDATA, white space and significant white space nodes converted to the requested type.

Moves to the next start element or end element tag. Entity references are automatically expanded.

Attribute

Same as calling XmlConvert.ToXxx on the attribute value.

The reader remains in the current position.

Comment

ProcessingInstruction

Ignores the processing instruction (PI) or comment and reads the concatenated text content that follows the PI or comment.

Moves to the next start element or end element tag. Entity references are automatically expanded.

EndElement

An empty string.

The reader remains in the current position.

Element

XmlDeclaration

None

Document

DocumentType

Notation

Entity

DocumentFragment

An InvalidOperationException is thrown.

Undefined, although typically the reader remains in the current position.

NoteNote:

The item delimiter for arrays is a single space. When deserializing arrays of type string, object, byte[], and Uri, the resulting array will contain an empty string value for any sequence of two delimiters (spaces) between non-empty values. For example, "a b", with two spaces, is deserialized as ["a", "", "b"]. This is different from other .NET Framework behavior and from all the other array types in which the empty values are ignored.

You can use the following work-around to remove empty spaces:

1. Get the content as one big string instead of a string array from ReadContentAsString.

2. Use the System.String.Split method with StringSplitOptions.RemoveEmptyEntities to convert the big string into a string array.

3. Work with the resulting string array or convert each item further, for example, to Uri.

Version Information

Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

XNA Framework

Supported in: Xbox 360, Windows Phone OS 7.0

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.