public override Association GetAssociation(TypeExtension typeExtension, MemberAccessor member) { if (typeExtension == TypeExtension.Null) { return(null); } MemberExtension mex = typeExtension[member.Name]; if (mex == MemberExtension.Null) { return(null); } AttributeExtensionCollection attrs = mex.Attributes[TypeExtension.NodeName.Association]; if (attrs == AttributeExtensionCollection.Null) { return(null); } return(new Association( member, Association.ParseKeys(attrs[0]["ThisKey", string.Empty].ToString()), Association.ParseKeys(attrs[0]["OtherKey", string.Empty].ToString()), attrs[0]["Storage", string.Empty].ToString(), TypeExtension.ToBoolean(attrs[0]["Storage", "True"], true))); }
private static Expression GenerateKeyValueObjectReadValue(MemberExtension member, ParameterExpression newModel) { if (!member.IsProperty || (member.IsProperty && member.PropertyInfo.CanWrite)) { var valueFormatAttribute = member.MemberInfo.GetCustomAttribute <ValueFormatAttribute>() ?? member.MemberInfo.DeclaringType.GetCustomAttribute <ValueFormatAttribute>(); if (valueFormatAttribute != null)//part { return(GenerateValueFormatCode(Expression.Constant(valueFormatAttribute, typeof(ValueFormatAttribute)), ValueFormatAttribute._ReadValueFormat, new[] { ExpressionMembers.JsonRemoveQuoteAndSubstring, Expression.Constant(member.Type, typeof(Type)), ExpressionMembers.JsonDeserializeHandler, ExpressionMembers.IsValueFormat }, newModel, member)); } else //global { /* * if( jsonDeserializeHandler.jsonDeserializeOption .globalValueFormat!=null) * { * } * else * model.N=ReadJson(); */ return(Expression.IfThenElse(ExpressionMembers.GlobalValueFormatNotEqualNull, GenerateValueFormatCode(ExpressionMembers.GlobalValueFormat, JsonDeserializeOption._GlobalValueFormatInvoke, new[] { ExpressionMembers.JsonRemoveQuoteAndSubstring, Expression.Constant(member.Type, typeof(Type)), ExpressionMembers.JsonDeserializeHandler, ExpressionMembers.IsValueFormat }, newModel, member), Expression.Assign(Expression.MakeMemberAccess(newModel, member.MemberInfo), ExpressionMembers.GetMethodCall(member.Type)))); } } else { /* SkipObj(); */ return(Expression.Call(ExpressionMembers.Reader, JsonReader._SkipObj, ExpressionMembers.JsonDeserializeHandler)); } }
private static void MergeExtensions(MemberExtension fromExt, ref MemberExtension toExt) { foreach (var attribute in fromExt.Attributes) { if (toExt.Attributes.ContainsKey(attribute.Key)) { toExt.Attributes.Remove(attribute.Key); } toExt.Attributes.Add(attribute.Key, attribute.Value); } }
protected MemberExtension GetMemberExtension(string name) { MemberExtension member; if (!this._typeExtension.Members.TryGetValue(name, out member)) { member = new MemberExtension { Name = name }; this._typeExtension.Members.Add(member); } return(member); }
/// <summary> /// Maps the value. /// </summary> /// <typeparam name="TV">The type of the V.</typeparam> /// <param name="origValue">The orig value.</param> /// <param name="value">The value.</param> /// <param name="values">The values.</param> void IFluentMap.MapValue <TV>(Enum origValue, TV value, TV[] values) { MemberExtension member; var name = Enum.GetName(origValue.GetType(), origValue); if (!this._typeExtension.Members.TryGetValue(name, out member)) { member = new MemberExtension { Name = name }; this._typeExtension.Members.Add(member); } this.FillMapValueExtension(member.Attributes, origValue, value, values); this.EachChilds(m => m.MapValue(origValue, value, values)); }
internal void Insert(string str, MemberExtension mem) { CharTries charTries = this; foreach (var c in str) { var @case = charTries.Childrens.Find(e => e.Val == c); if (@case == null) { @case = new CharTries() { Val = c, Parent = charTries }; charTries.Childrens.Add(@case); } charTries = @case; } charTries.IsValue = true; charTries.Member = mem; }
private static BlockExpression GenerateValueFormatCode(Expression formatDeclareInstance, MethodInfo callFormat, Expression[] paras, ParameterExpression newModel, MemberExtension member) { Expression[] expressions = new Expression[6]; /* * reader.BeforAnnotation(); * reader.RollBackChar() */ expressions[0] = Expression.Call(ExpressionMembers.Reader, JsonReader._BeforAnnotation); expressions[1] = Expression.Call(ExpressionMembers.Reader, JsonReader._RollbackChar); /* * currentIdx= Length - reader.Remaining */ expressions[2] = ExpressionMembers.CurrentIdxAssignReming; /* * valueLength=reader.Skipobj() */ expressions[3] = (ExpressionMembers.ValueLengthAssignSkipObj); /* * object formatResult = ValueFormat.ReadValueFormat( reader.Substring(currentIdx,valueLength) ,out isValueFormat); */ expressions[4] = (Expression.Assign(ExpressionMembers.FormatResult, Expression.Call(formatDeclareInstance, callFormat, paras))); /* * if(isValueFormat==true) * model.N=(Convert)obj; * else * reader.Rollback(valueLength) * m.N=ReadJson();//string */ expressions[5] = (Expression.IfThenElse(ExpressionMembers.IsValueFormatEqualTrue, Expression.Assign(Expression.MakeMemberAccess(newModel, member.MemberInfo), Expression.Convert(ExpressionMembers.FormatResult, member.Type)), Expression.Block(Expression.Call(ExpressionMembers.Reader, JsonReader._Rollback, ExpressionMembers.ValueLength), Expression.Assign(Expression.MakeMemberAccess(newModel, member.MemberInfo), ExpressionMembers.GetMethodCall(member.Type))))); return(Expression.Block(expressions)); }