2011-01-12 14 views
4

FacebookのグラフC#SDKをダウンロードしました。このサンプルは非常に役に立ち、わかりやすいですが、動的オブジェクトタイプを返すオブジェクトとして使用しようとすると、 FacebookApp.Get( "私")の呼び出し。Facebook C#SDK - .NET 3.5&Dynamic objects

ダイナミクスを使用したことがないので、私は少し再試行しました。Visual Studio 2010には新しくなったようですが、使用しているバージョンですが、私の生産環境のために最新のフレームワークを使用できません。

私が代わりに使うことができるタイプがあるのですか、それとも3.5フレームワークを使って別の方法がありますか?ここでは、フレームワークのバイナリとともに提供されるソースファイルの例を示します。

ダイナミックタイプのアセンブリ参照が不足している可能性があるというエラーが表示されます。

すべてのヘルプは非常に評価されています!このSDKを手に入れることを楽しみにしています!!ダイナミック

+0

私は(彼らは、私はそれが動作するはずだと思うので、3.5フォルダを含める)私も3.5 .NETからSDKを使用するための方法を探していますので、あなたが質問をしてくれてうれしいです。ここに私の質問ですhttp://stackoverflow.com/questions/4675364/それに目を光らせてください。私たちの2人の間で、誰かが私たちの質問の1つに答えてくれるかもしれません。 –

答えて

-1

は、.NETない.NET 4.0 C#4.0で3.5

+0

私はそう思っていましたが、3.5フレームワークの限界内で同じ結果をどのように捉えることができるのか分かりませんでしたか?誰も私を正しい方向に向けることができますか? –

+0

あなたは反射が必要です。これを見て:http://stackoverflow.com/questions/2135533/c-3-5-dlr-expression-dynamic-question – Michel

+0

いいえアイデアの誰ですか? surly sombodyは.net 3.5でこれを使用しなければなりませんか?ありがとう! –

1

ここでの他の回答に基づいて、動的オブジェクトは実際にはFacebookのAPIから返されるJSONオブジェクトです。 SDKはダイナミックタイプを使用して、基礎となるデータへのより良いインターフェースを作成します。

私はIDictionaryにオブジェクトをキャストするというアイデアが好きではありませんでしたので、私はそれをさらに進めて、強く型付けされたアクセスメソッドをデータに提供するファサードオブジェクトを作成しました。

public class FBPerson : FBBase 
{ 
    #region constructor 
    public FBPerson(object personObject) 
     : base(personObject) 
    { 
    } 
    #endregion 

    #region Properties 
    public string first_name 
    { 
     get { return ExtractValueAsString("first_name"); } 
    } 
    public string last_name 
    { 
     get { return ExtractValueAsString("last_name"); } 
    } 
    public string name 
    { 
     get { return ExtractValueAsString("name"); } 
    } 
    public string email 
    { 
     get { return ExtractValueAsString("email"); } 
    } 
    public string id 
    { 
     get { return ExtractValueAsString("id"); } 
    } 
    public string link 
    { 
     get { return ExtractValueAsString("link"); } 
    } 
    public string username 
    { 
     get { return ExtractValueAsString("username"); } 
    } 
    public string location 
    { 
     get { return ExtractValueAsString("location"); } 
    } 
    public string gender 
    { 
     get { return ExtractValueAsString("gender"); } 
    } 
    public string timezone 
    { 
     get { return ExtractValueAsString("timezone"); } 
    } 
    public string locale 
    { 
     get { return ExtractValueAsString("locale"); } 
    } 
    public string verified 
    { 
     get { return ExtractValueAsString("verified"); } 
    } 
    public string updated_time 
    { 
     get { return ExtractValueAsString("updated_time"); } 
    } 
    #endregion 

} 

とベースクラス(あなたが他のSDKオブジェクトのためのファサードを作成することができます)...

public class FBBase 
{ 
    private IDictionary<string, object> fbCollection = null; 
    public FBBase(object collection) 
    { 
     fbCollection = (IDictionary<string, object>)collection; 
    } 

    protected string ExtractValueAsString(string value) 
    { 
     Validate(); 
     return fbCollection[value].ToString(); 
    } 
    protected void Validate() 
    { 
     if (fbCollection == null) 
     { 
      throw new InvalidOperationException("null collection object"); 
     } 
    } 
} 
+0

これを実行する方がずっと簡単です。私の答えを参照してください:http:// stackoverflow。com/questions/4674669/facebook-c-sdk-net-3-5-dynamic-objects/5572620#5572620 –

5

あなたは厳密に型指定されたオブジェクトを使用する場合はそれを行うには非常に簡単な方法があります。ここを参照してください:https://gist.github.com/906471

var fb = new FacebookClient("access_token"); 

var result = fb.Get<FBUser>("/me"); 

string name = result.Name; 

MessageBox.Show("Hi " + name); 

[DataContract] 
public class FBUser { 
    [DataMember(Name="name")] 
    public string Name { get; set; } 
    [DataMember(Name="first_name")] 
    public string FirstName { get; set; } 
}