我正在尝试每10秒对Web api url运行一次顺序请求,以记录返回数据的更改。代码段如下所示:
using (Stream objStream = response.GetResponseStream())
{
query result = (query)serializer.Deserialize(objStream);
Console.WriteLine(result.results.quote.Name + " " + result.results.quote.Ask);
objStream.Flush();
objStream.Close();
}
在运行反序列化时会抛出一个InvalidOperationException,并显示消息说XML文档格式错误。为了隔离问题,我试图使用autos / locals / watch视图在调试模式下找到“原始”响应内容,但我真的找不到它。
我可以找到响应头和许多其他信息,据我所知,这看起来没什么例外;内容长度显示-1。我不确定这是否是我应该关心的事情,但由于我无法找到“身体”的反应,我不禁对它产生怀疑。
所以我真正的问题是:如何在HttpWebResponse
或Stream
对象中找到“正文”?
旁边的问题:内容长度值是否为-1值得烦恼。
答案 0 :(得分:1)
如果从流中读取整个内容并在反序列化之前将其存储在变量中,则应该能够在调试时看到内容
答案 1 :(得分:0)
对于调试,我建议您将响应复制到字符串中,这样就可以看到它。
using (Stream objStream = response.GetResponseStream())
{
StreamReader sr = new StreamReader(objStream);
string response = sr.ReadToEnd();
objStream.Seek(0,SeekOrigin.Begin); // Get the pointer back to the begining.
query result = (query)serializer.Deserialize(objStream);
Console.WriteLine(result.results.quote.Name + " " + result.results.quote.Ask);
objStream.Flush(); // remove
objStream.Close();//remove
}
我还建议删除: objStream.Flush(); objStream.Close();
当使用'using'语句时,它调用Dispose()(IDisposable()),它将自动关闭流。