为什么XElement.Load会接受流



为什么XElement.Load方法接受Stream?

我有一段时间被困在这个问题上,因为我正在从HTTP Web响应流中将其解析为流,我认为它会将字节转换为字符串。然而,事实并非如此,我不得不使用StringReader将流转换为该方法能够正确读取的内容。

我的原始代码会编译但在运行时失败:

Stream datastream = response.GetResponseStream();
var xmlResult = XElement.Load(datastream);

上面会给出一个错误,说明"根元素丢失"。这可以通过使用StringReader并传递它来解决。

是否存在将Stream用于此方法的情况?

可能是编码问题。您无法从字节中解析XML。您只能从字符中解析它。流的字节必须首先转换为字符。

在解码为chars之后,似乎没有根元素,或者在根元素之前有垃圾。

我现在不知道XElement.Load默认做什么。它似乎在猜测编码(XmlTextReaderImpl.DetectEncoding)。找出数据的编码方式,并在Stream和XML框架之间分层StreamReader。设置正确的编码。

相关内容

  • 没有找到相关文章