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); } }
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)); }
public IObjectReader GetObjectReader(System.Dynamic.IDynamicMetaObjectProvider dynamicProvider) { return(new SafeObjectReader(new JilDynamicObjectReader(dynamicProvider))); }