2016-09-25 58 views
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的構造函數方法中顯示此輸入字符串。

我讀了另一個關於逐字串和「@」用法的問題。它不起作用。

+1

您已經下載一個JSON對象,所以它包裹在'JSON()'再次將JSON-逃避一切,這就是你所看到的(逃引用字符串中的引號等)。您可能想要返回原始字符串。嘗試'返回內容(GetLocationData()));'。 –

+1

@MaximilianGerhardt哦,等等......如果返回的字符串實際上是OP得到的,而不是調試器顯示的內容,那麼它不是我已經關閉它的副本。重開。 – hvd

+1

雙重轉義來自已經JSON編碼的對象上的Json()調用,或者調試器向他顯示的內容,在這種情況下沒有問題。 –

回答

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"]; 
相關問題