我第一次使用WebClient。当我做以下
var raw = new WebClient().DownloadString("http://ip-api.com/json");
只是test-method在浏览器中显示为字符串:
public string GetLocationData()
{
var raw = new WebClient().DownloadString("http://ip-api.com/json");
return raw;
}
然而,real-need方法返回额外的反斜杠
public ActionResult GetLocationDataInJson()
{
return Json(GetLocationData(), JsonRequestBehavior.AllowGet);
}
给我回报
"{\"as\":\"AS6584 Microsoft Corporation\",\"city\":\"Dublin\",\"country\":\"Ireland\",\"countryCode\":\"IE\",\"isp\":\"Microsoft Limited\",\"lat\":53.3331,\"lon\":-6.2489,\"org\":\"Microsoft Corporation\",\"query\":\"194.69.98.180\",\"region\":\"L\",\"regionName\":\"Leinster\",\"status\":\"success\",\"timezone\":\"Europe/Dublin\",\"zip\":\"\"}"
因此我无法通过MicrosoftJson使用此数据进行处理。如何获得正常的Json数据?我试过String.Replace()
,但它不起作用。
更新: 当我尝试将原始字符串发送到另一个方法
时会发生同样的情况public class LocationData
{
public LocationData(string json)
{
JObject jObject = JObject.Parse(json);
JToken location = jObject["LocationData"];
Latitude = (string)location[@"lat"];
Longitude = (string)location[@"lon"];
}
public string Latitude { get; set; }
public string Longitude { get; set; }
}
它抛出了一个例外,并说无法找到" lat"或" lon" ;调试器在带有反斜杠的LocationData的构造方法中显示此输入字符串。
我读了另外一些关于" @"的逐字字符串和用法的问题。它不起作用。
答案 0 :(得分:1)
我认为你可以尝试这种方法
var raw = new WebClient().DownloadString("http://ip-api.com/json");
var json = JToken.Parse(raw.ToString());
string Latitude = (string)json[@"lat"];
string Longitude = (string)json[@"lon"];