2011-01-12 8 views
4

페이스 북 용 Graph C# SDK를 다운로드 했으므로 예제는 매우 유용하고 이해하기 쉽지만 동적 객체 유형을 반환 객체로 사용하려고 할 때 마음이 편치 않습니다. FacebookApp.Get ("나") 전화.Facebook C# SDK - .NET 3.5 & Dynamic objects

역 동적 인 적이 없기 때문에 나는 약간의 reasearch를했고 Visual Studio 2010에 익숙하지 않은 것 같습니다. 사용중인 버전이지만 제 제작 환경 때문에 최신 프레임 워크를 사용할 수 없습니다 ..

내가 대신 사용할 수있는 유형이 있습니까? 아니면 3.5 프레임 워크를 사용하여 다른 방식으로 전환 할 수 있습니까? 다음은 프레임 워크 용 바이너리와 함께 제공된 소스 파일의 예입니다.

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

동적 유형에 대한 조립 참조가 누락되었다는 오류가 나타납니다.

모든 도움이 매우 감사합니다! 이 SDK와 그립에 점점 기대! 동적

+0

나는 3.5 .NET에서 SDK를 사용하는 방법을 찾고 있어요 때문에 당신이 질문을 다행이 (그들이 그렇게 내가이 일을해야한다고 생각 3.5 폴더를 포함). 여기 내 질문에 대한 http://stackoverflow.com/questions/4675364/ 그것을 지켜봐. 우리 둘 사이에 누군가가 우리의 질문 중 하나에 대답 할 것입니다. –

답변

-1

닷넷하지 닷넷 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

아무도 아이디어가 없습니까? surbody sombody는 .net 3.5에서 이것을 사용해야합니다. 감사! –

1

여기 다른 답변을 바탕으로 동적 개체는 실제로 페이스 북 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"); 
     } 
    } 
} 
+0

이렇게하는 것이 훨씬 쉬운 방법이 있습니다. 내 대답보기 : http : // stackoverflow.co.kr/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; } 
}