使用c#从json数据中获取值

时间:2015-07-08 12:21:48

标签: c# asp.net json json.net

我正在使用C#

创建一个Windows Forms Application项目

我想显示与TextBox上的IP地址相关的所有信息(如CityName,CountryCode等在不同的Label中)。 我已经阅读了很多关于JsonConvert的文章,我不想使用JsonConvert

这是我的c#代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Windows.Forms;

namespace GetIPinfo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            List<LocaionInfo1> locations = new List<LocaionInfo1>();
            string url = string.Format("http://ipinfo.io/" + txtip.Text);
            using (WebClient client = new WebClient())
            {
                string json = client.DownloadString(url);
                LocaionInfo1 location = new JavaScriptSerializer().Deserialize<LocaionInfo1>(json);
                locations.Add(location);
            }

            if (locations.Count > 0)
            {
                foreach (LocaionInfo1 loc in locations)
                {
                    label9.Text = loc.CityName;
                    label10.Text = loc.CountryCode;
                    label11.Text = loc.CountryName;
                }
            }
        }

        public class LocaionInfo1
        {
            public string IPAddress { get; set; }
            public string CountryName { get; set; }
            public string CountryCode { get; set; }
            public string CityName { get; set; }
            public string RegionName { get; set; }
            public string ZipCode { get; set; }
            public string Latitude { get; set; }
            public string Longitude { get; set; }
            public string TimeZone { get; set; }
        }
    }
}

问题是,当我调试此代码并在我的TextBox中输入IP,然后单击提交按钮 我的LocaionInfo1 location = new JavaScriptSerializer().Deserialize<LocaionInfo1>(json);NULL值。

JSON数据是:

{
  "ip": "182.69.151.41",
  "hostname": "abts-north-dynamic-041.151.69.182.airtelbroadband.in",
  "city": null,
  "country": "IN",
  "loc": "20.0000,77.0000",
  "org": "AS24560 Bharti Airtel Ltd., Telemedia Services"
}

所以请帮助获得这些所有价值。 我正在使用Visual Studio 2012。

3 个答案:

答案 0 :(得分:1)

所以我实际上不能尝试这个,因为我在移动设备上,但对于实际的JSON,您必须添加一个&#34; / json&#34;到链接

string url = string.Format("http://ipinfo.io/" + txtip.Text + "/json");

答案 1 :(得分:1)

你需要通过在对象属性上使用属性来提供一些映射来帮助json.net:

    public class LocaionInfo1
    {
        [JsonProperty(PropertyName = "ip")]
        public string IPAddress { get; set; }
        ....
    }

答案 2 :(得分:0)

您的媒体资源名称不一致。例如,在JSON中你有&#34; city&#34;但在你的对象中它是&#34; CityName。&#34;反序列化器应该如何知道如何映射它们?