为什么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
。设置正确的编码。