1

我是dynamic在 C# 中使用关键字的新手。看起来很简单,但我似乎无法有效地使用它。

我从 Facebook 看到这个例子:

var client = new FacebookClient();
dynamic me = client.Get("totten");
string firstname = me.first_name;

它工作正常,但如果你me在调试器中查看,你会看到它client.Get()返回简单的 JSON。与 Facebook 文档中所说的相同:

此请求的结果是一个动态对象,其中包含各种属性,例如 first_name、last_name、用户名等。您可以通过 在 Web 浏览器中浏览http://graph.facebook.com/totten来查看此请求的值。JSON 结果如下所示。

我想对 Foursquare 返回的 JSON 做同样的闪避:

private static string GetReturnedUrlFromHttp(string url)
{
    HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
    webRequest.Timeout = 10000;
    webRequest.Method = "GET";
    WebResponse response = webRequest.GetResponse();

    string responseStr = String.Empty;

    using (var stream = response.GetResponseStream())
    {
        var r = new StreamReader(stream);
        responseStr = r.ReadToEnd();
    }

    return responseStr;
}

public static void FillDataFromFoursquareUsingDynamic()
{
    string foursquare_url_detail = "https://api.foursquare.com/v2/venues/4b80718df964a520e57230e3?locale=en&client_id=XXX&client_secret=YYY&v=10102013";
    dynamic responseStr = GetReturnedUrlFromHttp(foursquare_url_detail);
    var response = responseStr.response;
}

我收到以下错误:

“字符串”不包含“响应”的定义

为什么会出现此错误,是否可以像在 Facebook 中那样“解析”任何 JSON 字符串?

4

1 回答 1

6

FacebookClient.Get并没有真正返回 JSON字符串。相反,它将字符串解析为动态对象,其属性与 JSON 字符串中值的名称匹配。

usingdynamic不会神奇地将字符串转换为具有字符串中定义的属性的对象。相反,您需要首先在 JSON.NET 等 JSON 库的帮助下解析字符串。

于 2013-09-16T13:57:38.753 回答