我正在使用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。
答案 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;反序列化器应该如何知道如何映射它们?