c #webrequest json文件缺少元素值

时间:2015-05-16 10:35:39

标签: c# json missing-data

我正在尝试下载此json文件以读取一些数据: http://ddragon.leagueoflegends.com/cdn/5.7.2/data/en_US/item.json

现在我的问题是,不知何故,标签属性中的值总是丢失。

我已经使用不同的方法来检索它们使用了不同的编码,但没有任何帮助。内容长度也小于我在浏览器中收到的内容。

以下是我已尝试过的一些代码。如您所见,我使用WebClient将其下载为字符串。还尝试将其下载为文件,结果相同。 使用HttpWebRequest和所有头属性。 使用HEAD方法接收的内容长度小于浏览器中的内容长度。

我还尝试使用MemoryStreamStreamReader来获取正确的数据。没有任何效果。

String url = "http://ddragon.leagueoflegends.com/cdn/" + version + "/data/en_US/item.json";
//String json = new WebClient().DownloadString(url);
String json = "";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36";
request.ContentType = "text/plain; charset=utf-8 ";
request.Accept = "*/*";
request.Method = "GET";
//Get the headers associated with the request.
WebHeaderCollection myWebHeaderCollection = request.Headers;
myWebHeaderCollection.Add("DNT", "1");
myWebHeaderCollection.Add("Accept-Encoding", "gzip, deflate, sdch");
myWebHeaderCollection.Add("Accept-Language", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4");
HttpWebRequest requestHeader = ((HttpWebRequest) WebRequest.Create(url));
requestHeader.Method = "HEAD";
using (WebResponse resp = requestHeader.GetResponse())
{
    Console.WriteLine(resp.ContentLength);
}
Stream responseStream;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (responseStream = response.GetResponseStream())
{
    if (responseStream != null)
    {
        Console.WriteLine(response.ContentLength);
        Console.WriteLine(response.ContentType);
        StreamReader readStream = null;
        if (string.IsNullOrEmpty(response.CharacterSet))
        {
            readStream = new StreamReader(responseStream);
        }
        else
        {
            readStream = new StreamReader(responseStream, Encoding.GetEncoding(response.CharacterSet));
        }

        json = readStream.ReadToEnd();
        readStream.Close();
        //using (var memoryStream = new MemoryStream())
        //{
        //    responseStream.CopyTo(memoryStream);
        //    json = Encoding.UTF8.GetString(memoryStream.ToArray());
        //}

    }
}

编辑: 样本输出: 浏览器:http://pastebin.com/nQBj64L0
C#客户端:http://pastebin.com/7a0Gxvcg

0 个答案:

没有答案