Facebook C#SDK - .NET 3.5和动态对象
我已经下载了Facebook的C#SDK,这些示例非常有帮助并且易于理解,但是当尝试使用动态对象类型作为返回对象FacebookApp.Get(“我”)电话。Facebook C#SDK - .NET 3.5和动态对象
我从来没有使用过动态,所以我做了一些研究,似乎他们是Visual Studio 2010的新手,这是我使用的版本,但由于我的生产环境,我无法使用最新的框架。 。
是否有我可以使用的类型,或者有没有不同的方式去使用3.5框架?这里是框架二进制文件提供的源文件的例子。
dynamic myInfo = app.Get("me");
lblTitle.Text = myInfo.name;
我收到一个错误消息,指出我可能缺少动态类型的组合引用。
任何和所有的帮助是非常apreciated!期待着掌握这个SDK!
动态是C#4.0 .NET 4.0没有.NET 3.5
我这么认为,我不知道如何在3.5框架的限制范围内获得相同的结果?任何人都可以将我指向正确的方向吗? – 2011-01-12 22:43:05
您需要反思;看看这个:http://stackoverflow.com/questions/2135533/c-3-5-dlr-expression-dynamic-question – Michel 2011-01-13 09:24:47
你可能想看看这篇文章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的<字符串,对象>
基于这里的一些其他答案,动态对象实际上是从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");
}
}
}
如果你想强类型对象有一个很简单的方法来做到这一点。在这里看到: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; }
}
我很高兴你问这个问题,因为我正在寻找一种方式来使用从.NET 3.5也SDK(它们包括一个3.5文件夹,所以我认为它应该工作)。这是我的问题http://stackoverflow.com/questions/4675364/保持关注它。在我们两个人之间,也许有人会回答我们的一个问题。 – 2011-01-14 04:35:52