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()調用,或者調試器向他顯示的內容,在這種情況下沒有問題。 –