为什么方法XElement.Load会接受Stream?
我被困在这一段时间因为我从HTTP Web响应流解析它是一个流,我认为它会将字节转换为字符串。但是,情况并非如此,我不得不使用StringReader将流转换为方法能够正确读取的内容。
我的原始代码将在运行时编译但失败:
Stream datastream = response.GetResponseStream();
var xmlResult = XElement.Load(datastream);
上面会给出一个错误,指出“Root Element is missing”。这可以通过使用StringReader并传递它来解决。
是否存在将Stream用于此方法的情况?
答案 0 :(得分:0)
可能是编码问题。您无法从字节解析XML。你只能从字符中解析它。必须首先将流的字节转换为字符。
似乎在解码为chars之后没有根元素或根元素之前有垃圾。
我现在不是XElement.Load
默认执行的操作。它似乎猜测编码(XmlTextReaderImpl.DetectEncoding
)。找出您的数据的编码格式,并在StreamReader
和XML框架之间分层Stream
。设置正确的编码。