C# 在c中从url获取json数据#

C# 在c中从url获取json数据#,c#,websocket,webclient,webrequest,C#,Websocket,Webclient,Webrequest,在我能够解析/使用图表中的数据之前,我正在尝试将以下url中的json数据导入到C#项目中的任何内容中: 实际上,我是通过使用websocket发送json请求来检索json数据的,但由于某种原因,无法使用此方法获取任何数据。因此,我决定在不提供任何json请求的情况下获取数据,因为链接很简单。但不管我怎么做,结果都是空的返回或错误。有一次我成功地将一大块数据添加到列表框中(看起来像是一个完整的html页面,其中包含一些我需要的数据,但我无法理解整个html代码的来源,因为链接只有json),

在我能够解析/使用图表中的数据之前,我正在尝试将以下url中的json数据导入到C#项目中的任何内容中:

实际上,我是通过使用websocket发送json请求来检索json数据的,但由于某种原因,无法使用此方法获取任何数据。因此,我决定在不提供任何json请求的情况下获取数据,因为链接很简单。但不管我怎么做,结果都是空的返回或错误。有一次我成功地将一大块数据添加到列表框中(看起来像是一个完整的html页面,其中包含一些我需要的数据,但我无法理解整个html代码的来源,因为链接只有json),但这也没用。试一试

WebRequest使用HttpWebRequest即使使用正确的system.net.http和所有其他文件,它也无法识别WebRequest。(尝试手动添加到引用中..但已在列表中选中它们) WebClient返回空的或无用的对象或变量类型名称HttpClient也不工作,但记不起它没有识别的内容。当我跌入谷底时,我甚至试着放一个webBrowser对象,并试图从那里读取它,但后来注意到这不应该那么难,于是决定问

以下是我迄今为止所做的工作:

  //HttpClient client3 = new HttpClient();
                             string url = textBox8.Text + listBox3.GetItemText(listBox3.SelectedItem) + listBox4.GetItemText(listBox4.SelectedItem);

                             MessageBox.Show(url);


                             //System.Uri uri = new System.Uri(url);
                             //webBrowser1.Url = uri;

                             System.Net.WebClient client8 = new System.Net.WebClient();
                             //client8.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"); //I dont know if this was needed but seen it on a different example and just added.
                             var html = client8.DownloadString(url);   //returns empty
                             var html2 = client8.DownloadData(url); //adds the line "System.Byte[]"
                             var html3 = client8.OpenRead(url); //adds something like "System.blabla.connectstream"
                             MessageBox.Show(html);


                             listBox1.Items.Add(html2.ToString());
                             listBox1.Items.Add(html3);

如果有人能帮助我,我将不胜感激。

使用WebClient很好

var client = new System.Net.WebClient();
var jsondata = client.DownloadString(url);
我会做你想做的。我已经使用提供的url对其进行了测试,它不会返回空字符串,而是返回json数据。
我认为,当您从输入控件创建url时,它可能有点损坏。您能否验证所使用的url实际上与您在此处发布的url相同?可能您在用于创建url的最后两个字符串之间缺少了一个
/
,使用WebClient创建url是可以的

var client = new System.Net.WebClient();
var jsondata = client.DownloadString(url);
我会做你想做的。我已经使用提供的url对其进行了测试,它不会返回空字符串,而是返回json数据。 我认为,当您从输入控件创建url时,它可能有点损坏。您能否验证所使用的url实际上与您在此处发布的url相同?也许您在用于创建url的最后两个字符串之间缺少了一个
/
,您是对的。Show显示一个空字符串。但事实上,您的html字符串是正确的,您可以通过将内容写入文件来查看它 比如
File.writealText(“myfile.txt”,html)

下面的代码(显示文本的前3000个字符时)也适用

System.Net.WebClient client8 = new System.Net.WebClient();
var html = client8.DownloadString("https://cex.io/api/ohlcv/hd/20160228/BTC/USD");
Console.WriteLine(html);
MessageBox.Show(html.Substring(0, 3000));
抱歉,您遇到了MessageBox.Show的错误/奇怪行为/错误实现

编辑

这似乎是windows控件的常见问题,这些控件的设计目的不是显示很长的多行数据…

@berkdi,你说得对。Show显示一个空字符串。但事实上,您的html字符串是正确的,您可以通过将内容写入文件来查看它 比如
File.writealText(“myfile.txt”,html)

下面的代码(显示文本的前3000个字符时)也适用

System.Net.WebClient client8 = new System.Net.WebClient();
var html = client8.DownloadString("https://cex.io/api/ohlcv/hd/20160228/BTC/USD");
Console.WriteLine(html);
MessageBox.Show(html.Substring(0, 3000));
抱歉,您遇到了MessageBox.Show的错误/奇怪行为/错误实现

编辑


这似乎是windows控件的常见问题,这些控件的设计目的不是显示很长的多行数据…

您的代码工作并返回json。。。。。老实说,它返回一个空的messegabox,不使用第一个函数(html)向listbox添加任何内容,并分别使用第二个和最后一个函数添加这两行。您使用的bytearray和ConnectStream都是错误的。您可以直接或间接调用.ToString(),它返回对象类型的名称。http://包含在内。它从预先确定的文本框中获取。我真的不知道如何使用这三个功能;DownloadStrin、DownloadData和OpenRead。我添加它们只是为了看看哪一个会起作用。我添加了似乎最有可能起作用的内容,因为它导致了错误,这就是我转换为字符串的原因,否则它不能同时接受它。请您向我展示一下您对WebClient的使用。DownloadString(url)很好,可以按预期工作。您确定所使用的url放在一起是正确的吗?您的代码可以工作并返回json。。。。。老实说,它返回一个空的messegabox,不使用第一个函数(html)向listbox添加任何内容,并分别使用第二个和最后一个函数添加这两行。您使用的bytearray和ConnectStream都是错误的。您可以直接或间接调用.ToString(),它返回对象类型的名称。http://包含在内。它从预先确定的文本框中获取。我真的不知道如何使用这三个功能;DownloadStrin、DownloadData和OpenRead。我添加它们只是为了看看哪一个会起作用。我添加了似乎最有可能起作用的内容,因为它导致了错误,这就是我转换为字符串的原因,否则它不能同时接受它。请您向我展示一下您对WebClient的使用。DownloadString(url)很好,可以按预期工作。你确定所使用的url放在一起是正确的吗?我已经诚实地尝试了每一个/| \和每一个细节。当我将url写入浏览器时,它会毫无问题地加载它……任何日期,任何年份……但在程序中,它从2016年起只返回一次完整正确的json(旧数据)。所有其他日期输入(由同一功能生成,并通过messagebox显示给我,以便我可以在浏览器上手动检查)冻结并崩溃…虽然它们在结构上相同,但在我的浏览器上检查时,您是否也可以使用不同的日期进行检查(到今天为止,没有今天的数据,实时提要不同)和货币对(来自btc、ltc、usd、eur)在您的浏览器上,通过这些方法,只要更改链接的日期和货币对部分在最后//,我就诚实地尝试了每一个/| \和每一个细节。当我将url写入浏览器时,它会毫无问题地加载它…任何日期,任何年份…但在程序中,它只会返回