为什么C#会为我的数据添加额外的反斜杠?

时间:2016-09-25 07:26:00

标签: c# json json.net

我第一次使用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的构造方法中显示此输入字符串。

我读了另外一些关于" @"的逐字字符串和用法的问题。它不起作用。

1 个答案:

答案 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"];