我使用以下代码下载文本(json):
var request = WebRequest.Create(url);
using (var response = request.GetResponse())
{
string charset = null;
var httpResponse = response as HttpWebResponse;
if (httpResponse != null)
{
if (httpResponse.StatusCode != HttpStatusCode.OK)
{
throw new System.Net.WebException("Ststus code was: " + httpResponse.StatusCode);
}
charset = httpResponse.CharacterSet;
}
Encoding enc = charset != null ? Encoding.GetEncoding(charset) : null;
using (var reader = new StreamReader(response.GetResponseStream(), enc, true))
{
return reader.ReadToEnd();
}
}
在Windows(.net)上运行正常。在Linux(Mono运行时)上,它有时会返回截断的数据:json解析器崩溃,因为无法找到字符串和类似错误的结束分隔符。解析器不是问题:我尝试过2种不同的问题。它似乎不是编码的问题,因为它有时可以工作,有时也不适用于完全相同的下载数据。
为什么单声道会以这种方式表现,我该如何避免这个问题?
编辑:我添加了一个控制台打印用于调试目的。直接来自上面代码的字符串肯定会被截断。
Edit2:以下是我如何使用结果:
string json = DownloadTextFile(url);
dynamic obj = Json.Decode(json);//Decoding fails here, because string is truncated.
答案 0 :(得分:0)
当我让程序在与网络连接良好的服务器上运行时,问题的发生频率要低得多。 (经过几千次下载,而不是几百后)。这对我的目的来说已经足够了。
检查内容长度没有多大帮助,因为它经常是-1。令人遗憾的是,网络内容在单声道中实现得很差。 (在.net上,即使连接错误,相同的代码也能完美运行。)