Facebook C#SDK - .NET 3.5&动态对象

时间:2011-01-12 22:21:54

标签: facebook-c#-sdk

我已经下载了适用于facebook的Graph C#SDK,这些示例非常有用并且易于理解,但是当我尝试使用动态对象类型作为FacebookApp.Get(“我”)调用的返回对象时,我会失败。

我以前从未使用过动力学所以我做了一些研究,看起来它们是Visual Studio 2010的新手,我正在使用的版本,但由于我的生产环境,我无法使用最新的框架......

是否有一种我可以使用的类型,或者使用3.5框架有不同的方法吗?以下是框架二进制文件提供的源文件示例。

dynamic myInfo = app.Get("me");
lblTitle.Text = myInfo.name;

我收到一条错误消息,指出我可能缺少类型动态的装配参考。

任何和所有的帮助都是非常苛刻的!期待着掌握这个SDK !!

4 个答案:

答案 0 :(得分: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; }
}

答案 1 :(得分:4)

您可能希望查看此文章http://blog.prabir.me/post/Facebook-CSharp-SDK-Writing-your-first-Facebook-Application.aspx

var fb = new FacebookClient("access_token");

var result = (IDictionary<string, object>)fb.Get("/me");
var name = (string)result["name"];

MessageBox.Show("Hi " + name);

您需要将其投射到 IDictionary&lt; string,object&gt;

答案 2 :(得分:1)

基于这里的一些其他答案,动态对象实际上是从facebook api返回的JSON对象。 SDK使用动态类型为底层数据创建更好的界面。

我不喜欢每次都将对象转换为IDictionary的想法,所以我更进了一步,创建了一个Facade对象,为数据提供了强类型的访问方法。

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");
        }
    }
}

答案 3 :(得分:-1)

动态是C#4.0 .Net 4.0而不是.Net 3.5