如何从JSON获取值?

时间:2015-05-07 20:22:53

标签: c# json

我想从网站输出消息:vk.com, 如果我输入浏览器:https://api.vk.com/method/"+method+"?"+param+"&v=5.31&access_token="+myAuth.Token1+""并填充正确的变量,我会得到一个页面:

  

“响应”:{ “计数”:12455, “项目”:[{ “ID”:19506, “日期”:1431024353, “出”:0, “USER_ID”:65896237, “read_state”:1, “title”:“......”,“body”:“Message”} ...

如何从JSON获取这些值(id,date,body)? 如果我运行我的代码尝试,我得到保存窗口或打开该JSON文件...

        private void button3_Click(object sender, EventArgs e)
        {
            string method = "messages.get";
            string param = "out";
            string url = "https://api.vk.com/method/"+method+"?"+param+"&v=5.31&access_token="+myAuth.Token1+"";
            webBrowser1.ScriptErrorsSuppressed = true;
            webBrowser1.Navigate(url);   
        }

4 个答案:

答案 0 :(得分:4)

获取整个JSON响应并发布here,然后生成您的课程。如果你成功的话,你会有类似的东西

public class Item
{
    public int id { get; set; }
    public int date { get; set; }
    public int @out { get; set; }
    public int user_id { get; set; }
    public int read_state { get; set; }
    public string title { get; set; }
    public string body { get; set; }
}

public class Response
{
    public int count { get; set; }
    public List<Item> items { get; set; }
}

public class RootObject
{
    public Response response { get; set; }
}

然后在你的代码中你可以

WebClient client = new WebClient();
string json = client.DownloadString(url);
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
RootObject response = (RootObject) json_serializer.Deserialize(json, typeof(RootObject));

现在 回复 包含您的信息,您只需循环浏览商品

答案 1 :(得分:1)

使用WebClient.DownloadString

,而不是使用WebBrowser控件
WebClient client = new WebClient();
string json = client.DownloadString(url);

这会将JSON作为字符串,而不显示任何UI。

你仍然需要解析JSON中的值 - 我不确定你是否知道如何做到这一点,因为你陷入了WebBrowser的困境。无论如何,我建议你试试Json.net库。

答案 2 :(得分:1)

您是否尝试过使用JsonConvert课程?我使用Web API创建了一个服务器,并使用JsonConvert为我自动反序列化Json值。这是我的意思的一个例子:

using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("base url");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await client.GetAsync("specific url extention"); //this will asynchronously call server
            if (response.IsSuccessStatusCode) //test if http connection made
            {
                string s = await response.Content.ReadAsStringAsync();
                List<string> fooList = JsonConvert.DeserializeObject<List<string>>(s);
                for (int i = 0; i < 3; i++)
                {
                    string id = fooList[0];
                    string date = fooList[1];
                    string body = fooList[2];
                }
        }

我希望这会有所帮助。

答案 3 :(得分:0)

我创建了一个带有jQuery UI的对话框,它使用ajax调用,mvc控制器返回所有产品。

使用Javascript:

$dialog = $("#dlgCadastroProduto").dialog({
    modal: true,
    autoOpen: false,
    height: 500,
    width: 700,
    buttons: {
        Ok: function () {
            $(this).dialog("close");                
            $("#lstProducts").empty();
            $("#lstSelectedProducts").empty();
            $.ajax({
                type: "GET",
                url: '/Product/jsonLoad',
                async: true,
                dataType: 'json',
                success:
                    function (data) {
                      //alert('success');
                      $.each(data, function (index, value) {
                        $("#lstProducts").append('<option value='+value.ID+'>'+value.Description+'</option>')                    
                      });
                    },
                error: function (data) {
                     //alert(data);
                }
            });
        }
    }
});

C#:

public JsonResult jsonLoad()
{
   var list = _productBLL.FindAll();
   var xpto = list.Select(x => new { Id = x.ID, Description = x.Description });
   return Json(xpto, JsonRequestBehavior.AllowGet);
}

我希望我有所帮助!