1

以前のバージョンでは、次を使用してクエリから結果を取得できました。

            var facebookClient = new Facebook.FacebookClient(accessToken);
            const string fqlQuery = "select pic_big from user where uid=me()";
            dynamic result = facebookClient.Query(fqlQuery);

            var profilePhotoUrl = result[0].pic_big.ToString();

バージョン 6 でも同じことができますが、以下を使用します。

            var facebookClient = new Facebook.FacebookClient(accessToken);
            const string fqlQuery = "select pic_big from user where uid=me()";
            dynamic result = facebookClient.Get("fql", new { q = fqlQuery });

            var profilePhotoUrl = result.data[0].pic_big.ToString(); //v6.0 requires us to add ".data[0]" field 

新しい方法が機能しますが、次のことを確認したいだけです:result.data[0].pic_big.ToString()正しい.

4

2 に答える 2

1

はい、data プロパティを含む新しい呼び出しは正しいです。変更の背後にある理由についてはわかりません。データ プロパティを含めると、結果の JSON 構造がより正確に模倣されますが、データ要素が既に存在するかどうかがわからないためです。

とにかく: data プロパティを使用するのがこれからの方法です!

于 2012-09-27T21:09:28.397 に答える
1

.dataここでは、 v6 で必要な理由について説明します。

v5 では、グラフ API ではまだ使用できなかったため、fql に REST API を使用しました。Rest api はラップアラウンドしていないdataため、使用する必要はありませんでした.data。fb がグラフ api を使用した fql のサポートを発表したとき、v5 のいくつかの新しいバージョンではグラフ api に移動しましたが、v5 での破壊的な変更を回避するために、sdk.dataは結果をユーザーに返す前に を内部的に削除しました (醜いハック)。

fql がグラフ API を使用したときの v5 の動作は次のとおりです。

public virtual object Query(string fql)
{
    if (string.IsNullOrEmpty(fql))
        throw new ArgumentNullException("fql");

    var parameters = new Dictionary<string, object>();
    parameters["q"] = fql;

        // when using graph api
    var result = (IDictionary<string, object>)Get("fql", parameters);
    return result["data"];

    /*
        // when using rest api
    var parameters = new Dictionary<string, object>();
    parameters["query"] = fql;
    parameters["method"] = "fql.query";

    return Get(parameters);
    */
}

そのため、ユーザーはこの透明性についてさえ知りませんでした。v6 はメジャー リリースであるQueryため、この醜いハックの回避策により、 を削除しました。fql を使用する唯一の方法は、通常の get を呼び出すことでした。これは fb が与える正確な結果を返すため、 を含める必要があり.dataました。

于 2012-09-29T01:22:54.920 に答える