public static dynamic TryGetProperty(dynamic dynamicObject, String PropertyName, dynamic Default)
 {
     try
     {
         if (!HasProperty(dynamicObject, PropertyName))
         {
             return(Default);
         }
         if (dynamicObject.GetType() == typeof(System.Web.Helpers.DynamicJsonObject))
         {
             // good thing this type of documentation was easy to find
             System.Web.Helpers.DynamicJsonObject obj = (System.Web.Helpers.DynamicJsonObject)dynamicObject;
             Type scope = obj.GetType();
             System.Dynamic.IDynamicMetaObjectProvider provider = obj as System.Dynamic.IDynamicMetaObjectProvider;
             if (provider != null)
             {
                 System.Linq.Expressions.ParameterExpression param = System.Linq.Expressions.Expression.Parameter(typeof(object));
                 System.Dynamic.DynamicMetaObject            mobj  = provider.GetMetaObject(param);
                 System.Dynamic.GetMemberBinder          binder    = (System.Dynamic.GetMemberBinder)Microsoft.CSharp.RuntimeBinder.Binder.GetMember(0, PropertyName, scope, new Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo[] { Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create(0, null) });
                 System.Dynamic.DynamicMetaObject        ret       = mobj.BindGetMember(binder);
                 System.Linq.Expressions.BlockExpression final     = System.Linq.Expressions.Expression.Block(
                     System.Linq.Expressions.Expression.Label(System.Runtime.CompilerServices.CallSiteBinder.UpdateLabel),
                     ret.Expression
                     );
                 System.Linq.Expressions.LambdaExpression lambda = System.Linq.Expressions.Expression.Lambda(final, param);
                 Delegate del = lambda.Compile();
                 return(del.DynamicInvoke(obj));
             }
             else
             {
                 return(obj.GetType().GetProperty(PropertyName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).GetValue(obj, null));
             }
         }
         else if (dynamicObject.GetType() == typeof(System.Collections.IDictionary))
         {
             return((Dictionary <String, object>)dynamicObject[PropertyName]);
         }
         return(Default);
     }
     catch (Exception ex)
     {
         throw new Exception("Could not determine if dynamic object has property.", ex);
     }
 }
Esempio n. 2
0
        public void Should_filter_a_list_of_dynamic_types()
        {
            dynamic expando = new System.Dynamic.ExpandoObject();

            expando.Foo = "Bar";
            var enumerable =
                new System.Dynamic.IDynamicMetaObjectProvider[] { expando };

            var data = QueryableFactory.CreateQueryable(enumerable)
                       .Where(new[] { new FilterDescriptor
                                      {
                                          Member   = "Foo",
                                          Operator = FilterOperator.IsEqualTo,
                                          Value    = "Bar"
                                      } }
                              );

            Assert.NotNull(data.ElementAt(0));
        }
        public void Should_filter_a_list_of_dynamic_types()
        {
            dynamic expando = new System.Dynamic.ExpandoObject();
            expando.Foo = "Bar";
            var enumerable =
                new System.Dynamic.IDynamicMetaObjectProvider[] { expando };

            var data = QueryableFactory.CreateQueryable(enumerable)
                                       .Where(new[] { new FilterDescriptor
                                                        {
                                                            Member = "Foo",
                                                            Operator = FilterOperator.IsEqualTo,
                                                            Value = "Bar"
                                                        }
                                                    }
                                             );

            Assert.NotNull(data.ElementAt(0));
        }
Esempio n. 4
0
 public IObjectReader GetObjectReader(System.Dynamic.IDynamicMetaObjectProvider dynamicProvider)
 {
     return(new SafeObjectReader(new JilDynamicObjectReader(dynamicProvider)));
 }