解析JSON时使用dynamic关键字

时间:2013-09-16 13:52:27

标签: c# json dynamic

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

我在Facebook上看到这个例子:

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

它工作正常,但如果你在调试器中查看me,那么你可以看到client.Get()返回简单的JSON。它在Facebook文档中也是这样说的:

  

此请求的结果是包含各种内容的动态对象   诸如first_name,last_name,用户名等属性。您可以看到   通过浏览到此请求的值   您的网络浏览器中的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字符串?

1 个答案:

答案 0 :(得分:6)

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

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