2015-07-08 4 views
2

Я создаю проект приложения Windows Forms с помощью C#Получить значение из данных JSON, используя C#

Я хочу, чтобы показать всю информацию (например, CITYNAME, COUNTRYCODE и т.д. в разных Ярлыке), связанные с IP-адресом, который находится на моем Текстовое окно. Я уже много читал статью о 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; } 
     } 
    } 
} 

Проблема заключается в том, что, когда я отладки этот код и введите IP-адрес в моем TextBox, а затем нажмите на кнопку Submit My 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

Ваши имена собственности не соответствуют друг другу. Например, в JSON у вас есть «город», но в вашем объекте это «CityName». Как десериализатор должен знать, как их сопоставить?

+0

в целях предотвращения подобных несоответствий, я предложил бы использовать что-то вроде «http://json2csharp.com». Делает вашу жизнь проще. –

1

Так что я не могу на самом деле попробовать это, потому что я на мобильном телефоне, но и для фактического JSON вы должны добавить «/» JSON по ссылке

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

Вы должны помочь JSON. чистый отток немного, давая некоторое отображение с помощью атрибута на свойствах объекта:

public class LocaionInfo1 
    { 
     [JsonProperty(PropertyName = "ip")] 
     public string IPAddress { get; set; } 
     .... 
    } 
Смежные вопросы