0
我第一次使用WebClient。当我做了以下为什么C#为我的数据添加额外的反斜杠?
var raw = new WebClient().DownloadString("http://ip-api.com/json");
,只是测试方法在浏览器中正常显示它作为字符串:
public string GetLocationData()
{
var raw = new WebClient().DownloadString("http://ip-api.com/json");
return raw;
}
然而,现实需要的方法与额外的反斜杠返回
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”或“经度”;调试器在带有反斜杠的LocationData的构造函数方法中显示此输入字符串。
我读了另一个关于逐字串和“@”用法的问题。它不起作用。
您已经下载一个JSON对象,所以它包裹在'JSON()'再次将JSON-逃避一切,这就是你所看到的(逃引用字符串中的引号等)。您可能想要返回原始字符串。尝试'返回内容(GetLocationData()));'。 –
@MaximilianGerhardt哦,等等......如果返回的字符串实际上是OP得到的,而不是调试器显示的内容,那么它不是我已经关闭它的副本。重开。 – hvd
双重转义来自已经JSON编码的对象上的Json()调用,或者调试器向他显示的内容,在这种情况下没有问题。 –