David_Wimbley
Я не запускал ваш код, но думаю, что первым местом для начала будет ваш класс, к которому вы пытаетесь десериализовать ответ.
Я взял URL-адрес и получил json с самого сайта, и ваша структура выглядит неправильной. Я использовал json2csharp.com и получил следующее, что вы должны использовать при десериализации.
формат JSON
{
"status":"success",
"description":"Data successfully received.",
"data":{
"geo":{
"host":"1.1.1.1",
"ip":"1.1.1.1",
"rdns":"hostname",
"asn":"1111111",
"isp":"ISP",
"country_name":"United States",
"country_code":"US",
"region":"GA",
"city":"Atlanta",
"postal_code":"11111",
"continent_code":"NA",
"latitude":"11.1",
"longitude":"-11.1",
"dma_code":"111",
"area_code":"111",
"timezone":"America\/New_York",
"datetime":"2017-07-25 21:37:30"
}
}
}
Какой класс будет соответствовать этому объекту
public class Geo
{
public string host { get; set; }
public string ip { get; set; }
public string rdns { get; set; }
public string asn { get; set; }
public string isp { get; set; }
public string country_name { get; set; }
public string country_code { get; set; }
public string region { get; set; }
public string city { get; set; }
public string postal_code { get; set; }
public string continent_code { get; set; }
public string latitude { get; set; }
public string longitude { get; set; }
public string dma_code { get; set; }
public string area_code { get; set; }
public string timezone { get; set; }
public string datetime { get; set; }
}
public class Data
{
public Geo geo { get; set; }
}
public class RootObject
{
public string status { get; set; }
public string description { get; set; }
public Data data { get; set; }
}
Класс, который вы используете, будет ожидать, что возвращаемый json будет просто
{
"status":"success",
"description":"Data successfully received.",
"host":"1.1.1.1",
"ip":"1.1.1.1",
"rdns":"hostname",
"asn":"1111111",
"isp":"ISP",
"country_name":"United States",
"country_code":"US",
"region":"GA",
"city":"Atlanta",
"postal_code":"11111",
"continent_code":"NA",
"latitude":"11.1",
"longitude":"-11.1",
"dma_code":"111",
"area_code":"111",
"timezone":"America\/New_York",
"datetime":"2017-07-25 21:37:30"
}
и даже тогда некоторые метки, которые вы используете в своем классе, не совпадают с метками, возвращаемыми в json.
Но когда вы десериализуете свою строку в объект вместо
IPData ipdata = JsonConvert.DeserializeObject<IPData>(response);
вы бы сделали
RootObject ipdata = JsonConvert.DeserializeObject<RootObject>(response);
Поэтому я думаю, что если вы поменяете свои IP-данные с приведенной выше структурой классов, это может сработать, опять же я сам не запускал ваш код.