Based on some other answers here, dynamic objects are really JSON objects that are returned from the facebook api. The SDK uses a dynamic type to create a more convenient interface with basic data.
I did not like the idea of ββcasting objects in an IDictionary every time, so I took another step and created a facade object that provides a strongly typed data access method.
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 }
And the base class (so you can create facades for other SDK objects) ...
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"); } } }
source share