我已经下载了适用于facebook的Graph C#SDK,这些示例非常有用并且易于理解,但是当我尝试使用动态对象类型作为FacebookApp.Get(“我”)调用的返回对象时,我会失败。
我以前从未使用过动力学所以我做了一些研究,看起来它们是Visual Studio 2010的新手,我正在使用的版本,但由于我的生产环境,我无法使用最新的框架......
是否有一种我可以使用的类型,或者使用3.5框架有不同的方法吗?以下是框架二进制文件提供的源文件示例。
dynamic myInfo = app.Get("me");
lblTitle.Text = myInfo.name;
我收到一条错误消息,指出我可能缺少类型动态的装配参考。
任何和所有的帮助都是非常苛刻的!期待着掌握这个SDK !!
答案 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