我无法在 Webbrowser 控件中加载大的 JSON。使用 IE11 和此 reg 加载 JSON 而不是下载它。
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00
如果我下载文件,它有 7.329.068 个字符。如果我在 webbrowser 控件(或 WebClient)中加载它并访问 webBrowser2.Document.Body.InnerText 它只有 2.634.268 个字符。
有趣的是,文件没有被切碎。文件中缺少子元素。在 Notepad++ 中检查 tis。
最大的问题是,即使没有注册表解决方法和 web 客户端下载文件也不完整。
由于在这种情况下难以处理会话,我必须使用 webbrowser 控件。JSON 是一个 1 行文件,包含超过 500 万个字符。JSON 文件使用 JavaScriptSerializer 反序列化,并且适用于给定的 JSON
private void GetJsonView(string url_)//object sender, EventArgs e)
{
webBrowser2.Navigate(new Uri(url_));
webBrowser2.Navigate(url_);
}
private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
innerText = webBrowser2.Document.Body.InnerText;
JavaScriptSerializer test = new JavaScriptSerializer();
test.MaxJsonLength = Int32.MaxValue;
sicht = test.Deserialize<View>(innerText);
}
解决方法而不是注册表项,给出相同的缺失节点结果
private void webBrowser2_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (e.Url.Segments[e.Url.Segments.Length - 1].EndsWith("/"))
{
e.Cancel = true;
string filepath = null;
saveFileDialog1.FileName = e.Url.Segments[e.Url.Segments.Length - 1];
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
filepath = saveFileDialog1.FileName;
WebClient client = new WebClient();
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadFileAsync(e.Url, filepath);
}
}
}
现在我不知道为什么 IE 会“隐藏”一些节点。文件是保存还是直接解析为我的方法的字符串都没有关系。主要目标是接收整个有效载荷,我不知道如何实现这一目标。