2011-01-12 14 views
4

Ich habe das Graph C# SDK für Facebook heruntergeladen, die Beispiele sind sehr hilfreich und leicht zu verstehen, aber ich komme nicht in Versuch, den dynamischen Objekttyp als Rückgabeobjekt zu verwenden FacebookApp.Get ("mich") Anruf.Facebook C# SDK - .NET 3.5 & Dynamische Objekte

Ich habe noch nie zuvor Dynamiken verwendet, also habe ich ein bisschen Forschung gemacht und es scheint, dass sie neu in Visual Studio 2010 sind, das ist die Version, die ich benutze, aber ich kann das neueste Framework wegen meiner Produktionsumgebung nicht verwenden. .

Gibt es einen Typ, den ich stattdessen verwenden kann, oder gibt es einen anderen Weg, dies mit dem 3.5 Framework zu tun? Hier ist ein Beispiel aus den Quelldateien, die mit der Binärdatei für das Framework bereitgestellt werden.

Ich bekomme einen Fehler, der besagt, dass ich eine Assembly-Referenz für Typ dynamisch vermissen kann.

Jede und alle Hilfe wird sehr geschätzt! Ich freue mich darauf, dieses SDK in den Griff zu bekommen !!

+0

Ich bin froh, dass du die Frage gestellt, weil ich nach einer Möglichkeit, auch die sdk zu verwenden, um von .net 3.5 (sie umfassen einen 3,5-Ordner so denke ich, es sollte funktionieren). Hier ist meine Frage http://StackOverflow.com/Questions/4675364/ Behalten Sie es im Auge. Zwischen uns beiden wird vielleicht jemand eine unserer Fragen beantworten. –

Antwort

-1

dynamisch ist C# .NET 4.0 .NET 4.0 nicht 3.5

+0

Ich dachte, ich bin mir nicht sicher, wie ich das gleiche Ergebnis innerhalb der Grenzen des 3.5 Rahmens erreichen kann? kann mir jemand in die richtige richtung zeigen? –

+0

Sie brauchen Reflexion; Schau dir das an: http://stackoverflow.com/questions/2135533/c-3-5-dlr-expression-dynamic-question – Michel

+0

Keine ideen jemand? surly sombody muss das mit .net 3.5 verwenden? Vielen Dank! –

1

Aufbauend auf einige der anderen Antworten hier sind die dynamischen Objekte wirklich JSON-Objekte, die von der Facebook API zurückgegeben werden. Das SDK verwendet den dynamischen Typ, um eine schönere Schnittstelle zu den zugrunde liegenden Daten zu erstellen.

Ich mochte nicht die Idee, die Objekte jedes Mal IDictionary zu übergeben, also ging ich einen Schritt weiter und erstellte ein Fassadenobjekt, das eine stark typisierte Zugriffsmethode für die Daten bietet.

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 

} 

Und die Basisklasse (so können Sie Fassaden für andere SDK-Objekte erstellen) ...

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

Es gibt einen viel einfacheren Weg, dies zu tun. Siehe meine Antwort: http: // stackoverflow.com/fragen/4674669/facebook-c-sdk-net-3-5-dynamische-objekte/5572620 # 5572620 –

5

Wenn Sie stark typisierte Objekte möchten, gibt es eine sehr einfache Möglichkeit, das zu tun. Siehe hier: 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; } 
}