为什么XElement.Load会接受Stream?

时间:2014-10-27 11:30:09

标签: c# stream xelement

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

我被困在这一段时间因为我从HTTP Web响应流解析它是一个流,我认为它会将字节转换为字符串。但是,情况并非如此,我不得不使用StringReader将流转换为方法能够正确读取的内容。

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

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

上面会给出一个错误,指出“Root Element is missing”。这可以通过使用StringReader并传递它来解决。

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

1 个答案:

答案 0 :(得分:0)

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

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

我现在不是XElement.Load默认执行的操作。它似乎猜测编码(XmlTextReaderImpl.DetectEncoding)。找出您的数据的编码格式,并在StreamReader和XML框架之间分层Stream。设置正确的编码。